选择和操作混合节点

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()