【问题标题】:xpath php select text and child node in orderxpath php按顺序选择文本和子节点
【发布时间】:2014-10-08 09:45:02
【问题描述】:

我有一个这样的 xml:

<p>tex text</p>
<p><a2>subchild text</a2> text text text</p>

我想以书面顺序提取所有文本(来自 p 和所有子节点)并将结果放入字符串中。 我使用以下查询

$text = $currentNode->xpath("p[not(@class='notes')]/text())
foreach($text as $tex) {
    $finalText .= $tex." ";
}

问题是我无法获取子节点文本,例如我的示例中节点“a2”的文本。 有什么帮助吗?谢谢

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    /text () 仅查找直接文本节点,//text () 查找直接或较低节点。它是 descendent-or-self::text () 的缩写。

    所以你的查询只需要一个额外的斜杠:

    $text = $currentNode->xpath("p[not(@class='notes')]//text());
    

    (假设您只想要文本而不是子元素的副本)。

    【讨论】:

    • 是的,它可以工作,但是我得到了倒序的子节点,例如在上面的示例中,我得到:“tex 文本,文本文本文本子子文本”。为什么?
    • 你在用什么?我使用了 xsltproc 和 php,并且都按照预期的顺序给了孩子:

      text 1

      Text 2 Text 3

      给出“文本 1 文本 2 文本 3”
    • 我正在使用 SimpleXMLElement::xpath 和 php。我在 simpleXmlObject 上使用 xpath
    • 我不确定 simpleXML 的一致性如何。尝试使用 DomDocument 和 DOMXPath - 可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多