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 <element id="1"> <choice> <sequence> <element id="11"> <group> <element id="111"> <!-- ... -->

我一直在关注xml

<element id="1">
    <choice>
        <sequence>
            <element id="11">
                <group>
                    <element id="111">
                        <!-- ... -->
                    </element>
                </group>
            </element>
            <element id="12">
                <element id="121">
                    <!-- ... -->
                </element>
            </element>
        </sequence>
    </choice>
</element>
当前节点和子节点之间可以是、和节点的任意组合。或者他们可能不是。如何获取当前但没有作为其子节点的节点的所有直接子节点

在一个节点的上下文中,我想编写如下内容: /选择|序列|组*/元素


但它不起作用:

我不确定我是否正确理解了这个问题。。。请尝试下面的XPath表达式,如果它不是您想要的,请告诉我:

./*[self::choice or self::sequence or self::group]/element

我认为只有再次使用选择根元素的xpath才能解决这个问题。例如,如果您通过xpath//element[@id=1]选择它,那么

选择你想要的。它将找到在它和“root”之间没有其他元素的元素


您可以在那里测试它-设置id=1,id=12….

它似乎可以工作。但我的例子太简单了。我检查了真实的数据,但它不起作用。现在我将用我的真实数据给出一个例子。借助于您的表达式,我理解了,但是需要做什么,以便不仅节点,而且/元素|属性不起作用…/*[self::element或self::attribute]不起作用你是说这个//element/*[self::choice或self::sequence或self::group]/element |属性吗?是的。但在这种情况下,两者都可以对当前的直接子对象。而不是在他身边。
.//element[ancestor::element[1] = //element[@id="1"]]