【发布时间】:2015-07-08 09:23:05
【问题描述】:
我正在使用 PHP,我想去掉特定标签内的所有标签,只保留纯文本。我坚持的问题是有一些子标签与父母标签具有相同的名称:
<corpo>
<num>1.</num>
<mod id="mod167">
String 1
<commas id="mod167-vir1" type="word">String 2</commas>
<com id="mod166-vir1-20090024-art13-com16.1"><num><<16.</num></com>
<rif xlink:href="urn" xlink:type="simple">String 3</rif><h:p>Something here</h:p>
<corpo>String 4</corpo>
</mod>
</corpo>
这里,例如,corpo 有一个同名的子标签 (<corpo>String 4</corpo>),并且在父标签 corpo 内使用了两次 num 标签(<num>1.</num> 和 <num>&lt;&lt;16.</num>) .
从最高的corpo 标签开始,我想去掉每个子标签,只保留纯文本。结果应该是:
<corpo>
String 1 String 2 <<16. String 3 Something here String 4
</corpo>
到目前为止,我通过添加我想要保留的所有标签来尝试使用 SimpleXML 和 PHP strip_tags,但当然它并没有给出我期望的结果。
$result = strip_tags($xml, "<corpo></corpo>";
【问题讨论】:
-
您的 XML 无效,您删除了命名空间定义 (xmlns:*)。你想读取字符串,还是真的需要新建一个xml?
-
报告的 XML 是从 dB 导出的复杂 XML 的摘录。我没有复制确切的 XML,因为我认为可以使用正则表达式解决问题,因为我只需要读取第一个
corpo标记内的所有字符串(纯文本)。 -
对于 XML,答案几乎永远不会是 RegEx。如果您删除命名空间定义,它会更改并破坏 XML。答案可能无效,因为缺少信息。