Simple XML使用PHP在上面的多个级别上查找父级

时间:2017-03-02 11:02:39

标签: php xml html5 simplexml

我有一个看起来像这样的xml文件:(名字是虚构的)

<base>
 <subbase>
   <item>
     <childItem>
       <childItemLevel1>
          <childItemLevel2>Value 1 </childItemLevel2>
          <childItemLevel2>Value 2 </childItemLevel2>
          <childItemLevel2>Value 3 </childItemLevel2>
        </childItemLevel1>
        <childItemLevel1>
          <childItemLevel2>Value 10 </childItemLevel2>
          <childItemLevel2>Value 20 </childItemLevel2>
          <childItemLevel2>Value 30 </childItemLevel2>
        </childItemLevel1>
     </childItem>
   </item>
 </subbase>
</base>

我使用SimpleXML,我无法弄清楚如何在多个级别上获取父级。

例如:

我在<childItemLevel2>Value 10</childItemLevel2>

如何联系到父<item>并将其打印出来?

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用Xpath轴。

$base = new SimpleXMLElement($xml);

$child = $base->xpath('.//childItemLevel2[contains(., "Value 10")]')[0];

var_dump($child->asXml());

$parent = $child->xpath('ancestor::item[1]')[0];

var_dump($parent->asXml());

输出:

string(44) "<childItemLevel2>Value 10 </childItemLevel2>"
string(484) "<item>
     <childItem>
       <childItemLevel1>
          <childItemLevel2>Value 1 </childItemLevel2>
          <childItemLevel2>Value 2 </childItemLevel2>
          <childItemLevel2>Value 3 </childItemLevel2>
        </childItemLevel1>
        <childItemLevel1>
          <childItemLevel2>Value 10 </childItemLevel2>
          <childItemLevel2>Value 20 </childItemLevel2>
          <childItemLevel2>Value 30 </childItemLevel2>
        </childItemLevel1>
     </childItem>
   </item>"

ancestor是一个轴,它包含层次结构中文档元素节点的任何节点。 ancestor::item将在此轴上选择任何名为item的内容。 ancestor::item[1]选择该列表中的第一个(最近的)。