php xpath:如何通过跳过特定的子项来选择所有Parent

时间:2016-12-22 07:53:40

标签: php xpath

我想编写一个xpath表达式,通过跳过特定的子项来获取父标记。这是我的源xml:

<root>
    <paren>
        <child1>10</child1>
        <child2>20</child2>
        <child3>30</child3>
    </paren>

    <paren>
        <child1>101</child1>
        <child2>202</child2>
        <child3>303</child3>
    </paren>
</root>

我想跳过<child3>并在xpath之后得到以下输出:

<root>
    <paren>
        <child1>10</child1>
        <child2>20</child2>
    </paren>

    <paren>
        <child1>101</child1>
        <child2>202</child2>
    </paren>
</root>

我尝试使用以下php代码:

$output_xml = $input_xml->xpath('//paren/*[not(self::child3)]');

它提供以下输出[注意:pren&amp;根标记丢失]:

<child1>10</child1>
<child2>20</child2>
<child1>101</child1>
<child2>202</child2>

如何编辑xpath以检索预期的输出?

1 个答案:

答案 0 :(得分:1)

使用纯XPath无法获得该输出。 Element是XPath数据模型中的一个单元。例如,选择www.medwebtest.com元素表示选择开始标记paren,结束标记<paren>以及其间的所有内容。在原始XML中没有这样的</paren>元素,XPath查询可以根据需要返回该元素。{1}}

您要做的更多是XML转换,通常使用XSLT或使用您选择的编程语言,大概是PHP。