Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xpath php按顺序选择文本和子节点_Xml_Xpath - Fatal编程技术网

Xml xpath php按顺序选择文本和子节点

Xml xpath php按顺序选择文本和子节点,xml,xpath,Xml,Xpath,我有这样一个xml: <p>tex text</p> <p><a2>subchild text</a2> text text text</p> 问题是我无法获取子节点文本,例如我的示例中节点“a2”的文本。 有什么帮助吗?谢谢/text()只查找即时文本节点,//text()查找即时或更低的节点。它是后代或self::text()的缩写 因此,您的查询只需要额外的斜杠: $text = $currentNode->x

我有这样一个xml:

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

/text()只查找即时文本节点,//text()查找即时或更低的节点。它是后代或self::text()的缩写

因此,您的查询只需要额外的斜杠:

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

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

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

text 2 text 3

给出了“text 1 text 2 text 3”,我使用的是SimpleXMLElement::xpath和php。我在SimpleXmlObjective上使用xpath,我不确定simpleXML的一致性如何。尝试使用DomDocument和DOMXPath——这很有效。
$text = $currentNode->xpath("p[not(@class='notes')]//text());