我正在尝试解析大型XML文件以将内容放入我的数据库中。我的问题很简单,虽然我发现很难找到一个漂亮而干净的解决方案。
想象一下以下的XML字符串:
<tag1>
OuterText <tag2>InnerText</tag2>
</tag1>
编辑。问题是:如何在字符串中捕获OuterText?
我可以删除标签和使用正则表达式的标签和内容,但是 到目前为止,我一直在使用SimpleXML,所以我更喜欢这种做法很好的答案。
答案 0 :(得分:1)
好吧,看起来我问这个问题的速度太快了。我使用自己的简化示例搞砸了一下,这就是我发现的。尽管XML格式不正确,它确实有效。
$xml = "<tag1>
OuterText <tag2>InnerText</tag2>
</tag1>"
$sxe = new SimpleXMLElement($xml);
$out = (string)$sxe;
$in = (string)$sxe->tag2;
// output:
// OuterText
// InnerText
echo "$out<br>$in";
编辑: 此方法将在内联标记的两侧使用带有OuterText的XML字符串生成以下结果:
$xml = "<tag1>
OuterText1 <tag2>InnerText</tag2> OuterText2
</tag1>"
// output will then be:
// OuterText1 OuterText2 ($out)
// InnerText ($in)
答案 1 :(得分:0)
这样的事情应该有效:
$yourinput = new SimpleXMLElement($xmlstr);
foreach($yourinput->tag1 as $curtag){
mysql_query("INSERT INTO table (field1, field2) VALUES($curtag, $curtag->tag2)");
}
答案 2 :(得分:0)
如果我正确理解了这个问题,你需要按顺序排列标签的所有文本内容,但不需要任何内部XML标签。
这不是特别优雅,但理论上这可以解决问题:
$inner_text = strip_tags($some_simplexml_node->asXML());
这里的技巧是SimpleXML可以将XML的任何片段(例如,在遍历文档时找到的单个节点)序列化为XML;从中删除所有标签应该按正确的顺序提供所有文本内容。
答案 3 :(得分:-1)
您将无法使用simpleXML或类似的东西,因为它不是有效的XML,而是将此文本包含在任何元素之外。这是故意的还是XML生成中的错误(不确定从哪里获取XML)?