2014-05-02 66 views
0

這裏使用DOM文檔的最後一個子節點是我的xml:

<details> 
     <car> 
      <id>61XZB6</id> 
      <Jan-01-14>20</Jan-01-14> 
      <Jan-02-14>435</Jan-02-14> 
      <Jan-03-14>454</Jan-03-14> 
      <Jan-04-14>768</Jan-04-14> 
      <Jan-05-14>24</Jan-05-14> 
      <Jan-06-14>675</Jan-06-14> 
      <Jan-07-14>213</Jan-07-14> 
      <Jan-08-14>44</Jan-08-14> 
      <Jan-09-14>565</Jan-09-14> 
      <Jan-10-14>80</Jan-10-14> 
      <Jan-11-14>998</Jan-11-14> 
      <Jan-12-14>67</Jan-12-14> 
      <Jan-13-14>77</Jan-13-14> 
      <Jan-14-14>909</Jan-14-14> 
      <Jan-15-14>34</Jan-15-14> 
      <Jan-16-14>887</Jan-16-14> 
      <Jan-17-14>767</Jan-17-14> 
      <Jan-18-14>545</Jan-18-14> 
      <Jan-19-14>67</Jan-19-14> 
      <Jan-20-14>787</Jan-20-14> 
      <Jan-21-14>898</Jan-21-14> 
      <Jan-22-14>435</Jan-22-14> 
      <Jan-23-14>42</Jan-23-14> 
      <Jan-24-14>232</Jan-24-14> 
      <Jan-25-14>234</Jan-25-14> 
      <Jan-26-14>675</Jan-26-14> 
      <Jan-27-14>46</Jan-27-14> 
      <Jan-28-14>546</Jan-28-14> 
      <Jan-29-14>88</Jan-29-14> 
      <Jan-30-14>0</Jan-30-14> 
      <Jan-31-14>0</Jan-31-14> 
     </car> 
    </details> 

我的查詢是如何提前插入一個新的節點到每個tag.Thanks前檢查每個標籤內的最後一個節點爲任何類型的幫助擴展。得到XML在PHP

回答

1

如果我理解你正確,你想檢查每個car元素節點中的最後一個元素?那麼,Xpath有兩種方法position()last()可以在一個條件中使用。

選擇汽車節點

/details/car

選擇car節點

/details/car/*

的子元素節點添加一個條件選擇限制到最後一個節點

/details/car/*[last()]

完整的示例:https://eval.in/145531

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXpath($dom); 

foreach ($xpath->evaluate('/details/car/*[last()]') as $node) { 
    var_dump(
    $node->nodeName, 
    $node->nodeValue 
); 
} 

輸出:

string(9) "Jan-31-14" 
string(1) "0" 

提示!

靈活的元素名稱是非常糟糕的風格,您將無法在模式中定義它們。如果可能的話,我建議你將它們改爲類似<amount date="Jan-31-14">0</amount>

+0

感謝您的解決方案。它爲我成功運作。 – user3595887