2017-03-03 138 views
0

我正在使用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'); 

回答

1

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

//Address/* 

您也可以嘗試

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

將兩個值都設爲單個字符串"Indiabulls Finance Centre Tower Elphinstone Road"

+0

我試着像$ XML->字符串連接( 「// CDT:地址/ *」,「「);但它顯示錯誤join():傳遞的參數無效 – hrishi

+0

不,我的意思是'$ xml-> xpath('string-join(// Address/*,「」)');' – Andersson

+0

SimpleXMLElement :: xpath():xmlXPathCompOpEval :function string-concat not found – hrishi

0

您可以使用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"