0

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

想象以下 XML 字符串:

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

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

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

4

4 回答 4

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)
于 2013-07-29T23:05:08.990 回答
0

像这样的东西应该工作:

$yourinput = new SimpleXMLElement($xmlstr);
foreach($yourinput->tag1 as $curtag){
    mysql_query("INSERT INTO table (field1, field2) VALUES($curtag, $curtag->tag2)");
}
于 2013-07-29T22:51:06.483 回答
0

如果我正确理解了这个问题,您希望标签的所有文本内容按顺序排列,但没有任何内部 XML 标记。

它不是特别优雅,但理论上这可以解决问题:

$inner_text = strip_tags($some_simplexml_node->asXML()); 

这里的技巧是SimpleXML 可以将XML 的任何片段(例如,您在遍历文档时找到的单个节点)序列化回XML。从中删除所有标签应该会以正确的顺序为您提供所有文本内容。

于 2013-07-30T19:50:39.320 回答
-1

You wont be able to use simpleXML or anything similar for this as it is not valid XML to have this text contained outside of any element. Is this intentional or an error in the XML generation(not sure where you are getting the XML from)?

于 2013-07-29T23:01:17.973 回答