Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xpath如何基于子对象选择父对象_Xml_Xpath - Fatal编程技术网

Xml xpath如何基于子对象选择父对象

Xml xpath如何基于子对象选择父对象,xml,xpath,Xml,Xpath,我的XML结构如下所示: <A> <B> <C> <D> <E>1</E> <F>123</F> </D> <D> <E>1</E>

我的XML结构如下所示:

<A>
    <B>
        <C>
            <D>
                <E>1</E>
                <F>123</F>
            </D>

            <D>
                <E>1</E>
                <F>153</F>
            </D>
        </C>

        <C>
            <D>
                <E>1</E>
                <F>134</F>
            </D>
        </C>
    </B>

    <B>
        <C>
            <D>
                <E>2</E>
                <F>133</F>
            </D>
        </C>

        <C>
            <D>
                <E>2</E>
                <F>134</F>
            </D>
        </C>
    </B>
</A>

1.
123
1.
153
1.
134
2.
133
2.
134
我想知道是否有可能得到所有的“B”元素(以及它的内容),其中F元素有特定的值,在本例中是134。但是,我不想同时获得其他C元素-因此对于本例,我希望获得:

<A>
    <B>
        <C>
            <D>
                <E>1</E>
                <F>134</F>
            </D>
        </C>
    </B>

    <B>
        <C>
            <D>
                <E>2</E>
                <F>134</F>
            </D>
        </C>
    </B>
</A>

1.
134
2.
134
这可能吗?我一直在使用xpath,但我得到的唯一东西是B元素,它的内容(不仅是所需的F元素)具有以下xpath: //D[F=134]/parent::C/parent::B

提前谢谢大家,,
Marcin

如果您在B元素级别进行选择(不管您对子元素有什么其他条件),您将始终获得B元素的全部内容


另一个选项是在C元素级别选择相反的条件(F!=134)并删除这些节点。不过,这取决于您的具体场景。

如果您真的不想使用
XPath
选择节点,您可能需要使用
XSLT
转换文档。你觉得我应该把所有的都循环一下,然后把我需要的打印出来吗?我想我会先选择它们,然后打印出来,从来没有想过用不同的方式:)