在单个PHP XPath中读取两个子节点
问题描述:
我正在使用PHP XPath来读取XML数据。我可以在单个Xpath中读取如下的两行地址。在单个PHP XPath中读取两个子节点
<Address>
<FirstLine>Indiabulls Finance Centre Tower</FirstLine>
<SecondLine>Elphinstone Road</SecondLine>
</Address>
目前,我读他们作为独立的XPath
$xml->xpath('//Address/FirstLine');
$xml->xpath('//Address/SecondLine');
答
只需使用通配符"*"
匹配的Address
任何子:
//Address/*
您也可以尝试
string-join(//Address/*, " ")
将两个值都设为单个字符串"Indiabulls Finance Centre Tower Elphinstone Road"
答
您可以使用Xpath获取多个节点。
- 结合两个替代位置路径/表达式
/Address/FirstLine|/Address/SecondLine
- 取任何地址子元素节点
/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"
我试着像$ XML->字符串连接( “// CDT:地址/ *”,““);但它显示错误join():传递的参数无效 – hrishi
不,我的意思是'$ xml-> xpath('string-join(// Address/*,“”)');' – Andersson
SimpleXMLElement :: xpath():xmlXPathCompOpEval :function string-concat not found – hrishi