简体   繁体   English

使用php中的DOMDocument从xml获取最后一个子节点

[英]get the last child node from xml using DOMDocument in php

Here is my xml: 这是我的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>

My query is how to check the last node inside each tag before inserting a new node to each tag.Thanks in advance for any sort of help extended. 我的查询是如何在将新节点插入每个标签之前检查每个标签内的最后一个节点。在此先感谢您提供的各种帮助。

If I understand you correctly you would like to check for the last element in each car element node? 如果我对您的理解正确,那么您想检查每个car元素节点中的最后一个元素吗? Well, Xpath hast two methods position() and last() that can be used in a condition. 好了,Xpath有两个可以在条件中使用的方法position()last()

Select the car nodes 选择汽车节点

/details/car

Select the child element nodes of the car nodes 选择car节点的子元素节点

/details/car/*

Add a condition to limit the selection to the last node 添加条件以将选择限制到最后一个节点

/details/car/*[last()]

Full example: https://eval.in/145531 完整示例: 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
  );
}

Output: 输出:

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

HINT! 暗示!

Flexible element names are really bad style, you will not be able to define them in a schema. 弹性元素名称确实是不好的样式,您将无法在架构中定义它们。 If possible I suggest you change them to something like <amount date="Jan-31-14">0</amount> 如果可能的话,我建议您将其更改为<amount date="Jan-31-14">0</amount>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM