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> <cls> <cl id="foo"> <a>1</a> <b>1</b> </cl> <cl id="bar"> <a>4</a> <b>2</b>

鉴于以下情况:

<xml>
    <cls>
        <cl id="foo">
            <a>1</a>
            <b>1</b>
        </cl>
        <cl id="bar">
            <a>4</a>
            <b>2</b>
        </cl>
        <cl id="foo">
            <a>1</a>
            <b>3</b>
        </cl>
    </cls>
    <orgs>
        <org clid="foo">
        </org>
        <org clid="foo">
        </org>
        <org clid="bar">
        </org>
        <org clid="bar">
        </org>
        <org clid="foo">
        </org>
    </orgs>
</xml>

1.
1.
4.
2.
1.
3.
如何选择
xml/orgs/org
s,其中org的
clid
xml/cls/cl
中的一个匹配(通过其
id
属性),其中
cl/a
的值为1

这有点复杂,我不知道如何处理这样的关系


最好与XPath 1.0兼容。

XPath
表达式:

//orgs/org[@clid=preceding::cls/cl[a=1]/@id]
尝试以下方法(XPath 1.0表达式):

输出:

<org clid="foo">
</org><org clid="foo">
</org><org clid="foo">

评论:


我动态地获取
id
字符串

这个XPath 1.0表达式

//orgs/org[@clid=//cl[a=1]/@id]
将根据请求,选择所有
org
元素,其
@clid
属性值等于至少一个
cl
元素的
@id
属性值,该元素的子
a
元素的值为
1

<org clid="foo">
        </org>
<org clid="foo">
        </org>
<org clid="foo">
        </org>

试试这个:
org
其中
clid
等于
cl
中具有
a=1的
id

 //xml/orgs/org[@clid = //xml/cls/cl[a=1]/@id]
或者,如果您不想保留
xml
org
cls
标记并将其缩短(但如果您的xml较大/复杂,最好保留原始标记):


谢谢,我稍微修改了一下:
xml/orgs/org[@clid=/xml/cls/cl[a/=1]/@id]
 //xml/orgs/org[@clid = //xml/cls/cl[a=1]/@id]
//org[@clid = //cl[a=1]/@id]