簡體   English   中英

XPath:根據父屬性獲取子值

[英]XPath: get child value based on parent attribute

假設XML具有以下結構:

<A>
  <B>
    <C>
      <D name='title1'>
        <E>
          <F data='d1'>ON</F>
        </E>
      </D>
      <D name='title2'>
        <E>
          <F data='d12'>ON</F>
        </E>
      </D>
    </C>
  </B>
</A>

如何獲得基於“ D”節點屬性的“ F”節點輸出? 有點像這樣:

/A/B/C/D[@name='title1']/E/F

我可以根據其屬性使用以下方法獲取F節點:

$status = $lol->xpath("//n:F[@data='d1']");
echo "Status: " . $status[0] . "</br>";

我厭倦了使用xpath的變體來獲得我想要的東西,但是沒有運氣。

想法?

//D[@name='title1']//F

會給你<F data='d1'>ON</F>

//D[@name='title2']//F

應該給你<F data='d12'>ON</F>

您的意思是“根據父D屬性查找所有F嗎?”

這是“查找具有D-parent-node的'title'屬性等於'title1'的所有F節點的示例:

$xml = <<<XML
<A>
  <B>
    <C>
      <D name='title1'>
        <E>
          <F data='d1'>ON</F>
        </E>
      </D>
      <D name='title1'>
        <E>
          <F data='d12'>ON</F>
        </E>
      </D>
    </C>
  </B>
</A>
XML;

$oXml = new SimpleXmlElement($xml);

var_dump($oXml->xpath("//D[@name='title1']//F"));

希望對您有幫助。

我喜歡處理一種XML文檔的簡單方法,類似於您嘗試的$status[0] ,它是這樣的:

工作實例

$status = $xml->xpath("//D");

echo $status[0]['name'] . " is " . $status[0]->E->F .  "\r\n";
echo $status[1]['name'] . " is " . $status[1]->E->F . "\r\n";

輸出:

title1 is ON
title2 is ON

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM