在单个PHP XPath中读取两个子节点

时间:2017-03-03 05:11:41

标签: php xml xpath

我正在使用 PHP XPath 来读取XML数据。我可以在单个Xpath中读取下面的两行地址。

<Address>
<FirstLine>Indiabulls Finance Centre Tower</FirstLine>
<SecondLine>Elphinstone Road</SecondLine>
</Address>

目前我正在将它们视为单独的XPath

 $xml->xpath('//Address/FirstLine');
 $xml->xpath('//Address/SecondLine');

2 个答案:

答案 0 :(得分:1)

只需使用通配符"*"匹配Address的任何子级:

//Address/*

你也可以尝试

string-join(//Address/*, " ")

将两个值都作为单个字符串"Indiabulls Finance Centre Tower Elphinstone Road"

答案 1 :(得分:0)

您可以使用Xpath获取多个节点。

  • 合并两个备用位置路径/表达式 /Address/FirstLine|/Address/SecondLine
  • 获取任何Address子元素节点 /Address/*
  • 获取任何Address子元素节点并过滤它们 /Address/*[self::FirstLine or self::SecondLine]

使用SimpleXML但在DOM中无法直接获取组合字符串。 SimpleXMLElement::xpath()只能返回节点数组(由SimpleXMLElement对象表示)。 DOMXpath::evaluate()可以返回标量。

$xml = '<Address>
<FirstLine>Indiabulls Finance Centre Tower</FirstLine>
<SecondLine>Elphinstone Road</SecondLine>
</Address>';

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$result = $xpath->evaluate("concat(/Address/FirstLine, '\n', /Address/SecondLine)");

var_dump($result);

输出:

string(48) "Indiabulls Finance Centre Tower
Elphinstone Road"