2017-04-12 64 views
0

我想獲得母公司數據時,我的孩子值以「ID22」獲取父數據時,孩子值相匹配

<servers> 
<someservers> 
    <owner>id0</owner> 
    <serverCode>fefwewf</serverCode> 
    <address>345345</address> 
    <authCertHash>efref</authCertHash> 
    <authCertHash>erferf=</authCertHash> 
    <client>id1</client> 
    <client>id22</client> 
</someservers> 
<someservers> 
    <owner>id33</owner> 
    <serverCode>f</sewewefrverCode> 
    <address>234234234</address> 
    <authCertHash>sdfs</authCertHash> 
    <client>id27</client> 
</someservers> 
</server> 

目前比賽我嘗試如下:

$server = $xml -> xpath('//someservers//client='id22'); 
echo $server->address; 

但它不工作,我得到錯誤:

Trying to get property of non-object in... 

我希望得到的輸出:

345345 

回答

1

SimpleXMLElement::xpath()僅支持返回的Xpath表達式一個節點列表,所以它可以將它們轉換成一個SimpleXMLElement實例的數組。

@andersson解釋過,你表達只返回指定的客戶端元素的存在。你需要使用一個條件。這將返回一個匹配SimpleXMLElement對象作爲元素的數組。

$servers = new SimpleXMLElement($xml); 
$server = $servers->xpath('//someservers[client="id22"]')[0]; 
echo $server->address; 

輸出:

345345 

DOMXpath::evaluate()能夠直接返回標值:

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath= new DOMXpath($document); 
echo $xpath->evaluate('string(//someservers[client="id22"]/address)'); 
0

XPath//someservers//client='id22打算返回布爾true/false價值,而不是元素或它的文本內容

嘗試以下XPath表達

//someservers[client='id22']/address/text() 

應該返回需要使用"345345"

+0

但如果我想獲得過該父項目下的其他值?我認爲我可以這樣做: echo $ server-> address; echo $ server-> owner; 甚至與foreach。 – Marko

+0

順便說一句,當我試圖回顯這樣,我得到了「數組」作爲回報。 – Marko

+0

您可以使用''// someservers [client ='id22']/*/text()'獲取所有值 – Andersson