PHP:如何使用SimpleXML解析/获取XML outerText

时间:2013-07-29 22:45:58

标签: php xml simplexml

我正在尝试解析大型XML文件以将内容放入我的数据库中。我的问题很简单,虽然我发现很难找到一个漂亮而干净的解决方案。

想象一下以下的XML字符串:

<tag1>
    OuterText <tag2>InnerText</tag2>
</tag1>

编辑。问题是:如何在字符串中捕获OuterText?

我可以删除标签和使用正则表达式的标签和内容,但是 到目前为止,我一直在使用SimpleXML,所以我更喜欢这种做法很好的答案。

4 个答案:

答案 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)?