选择和操作混合节点
Selecting and manipulating mixed nodes
我有成千上万个格式不正确的 html 文档,我必须仅使用 php 来修复格式错误。到目前为止,我对 simplexml 和 xpath 做得很好。现在我偶然发现了这个:
<ul>
Lorem ipsum <strong>dolor sit amet,</strong> consectetur
adipiscing elit, <em>sed</em> do eiusmod tempor
<li>incididunt</li>
<li>ut</li>
<li>labo</li>
</ul>
现在文本 Lorem…tempor 属于 <ul>
之外,而其他所有内容 (incididunt…labo) 应该保留一个列表项。
所以我的想法是 select <ul>
的不 <li>
的子节点,包括文本节点。但是我可以用 xpath 做到这一点吗?
您可以合并两个 xpath。第一个找到所有非 li 节点,第二个 - ul
下的文本节点
//ul/*[name() != "li"] | //ul/text()
我有成千上万个格式不正确的 html 文档,我必须仅使用 php 来修复格式错误。到目前为止,我对 simplexml 和 xpath 做得很好。现在我偶然发现了这个:
<ul>
Lorem ipsum <strong>dolor sit amet,</strong> consectetur
adipiscing elit, <em>sed</em> do eiusmod tempor
<li>incididunt</li>
<li>ut</li>
<li>labo</li>
</ul>
现在文本 Lorem…tempor 属于 <ul>
之外,而其他所有内容 (incididunt…labo) 应该保留一个列表项。
所以我的想法是 select <ul>
的不 <li>
的子节点,包括文本节点。但是我可以用 xpath 做到这一点吗?
您可以合并两个 xpath。第一个找到所有非 li 节点,第二个 - ul
下的文本节点//ul/*[name() != "li"] | //ul/text()