用XPath挑选樱桃

时间:2017-10-22 14:44:39

标签: xml xpath

鉴于以下内容:

<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>

如何xml/orgs/org选择clidxml/cls/cl id匹配的cl/a QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); let Node = contact.bodyB.node as! SKSpriteNode 的值{1}} ?

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

首选与XPath 1.0的兼容性。

4 个答案:

答案 0 :(得分:1)

//orgs/org[@clid=preceding::cls/cl[a=1]/@id] 表达式:

{{1}}

答案 1 :(得分:1)

试试这个: org其中clid等于id cl中有a = 1孩子的 //xml/orgs/org[@clid = //xml/cls/cl[a=1]/@id]

xml

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

"laravelcollective/html"

答案 2 :(得分:0)

试试这个(XPath 1.0表达式):

xmllint --xpath '//orgs/org[@clid=string(//cls/cl/a[text()="1"]/ancestor::cl[1]/@id)]' file.xml

输出:

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

评论:

我动态地获取id字符串

答案 3 :(得分:0)

此XPath 1.0表达式,

//orgs/org[@clid=//cl[a=1]/@id]

将选择所有org元素,@clid属性值等于至少一个@id元素的cl属性值,其中包含子a元素1的值,如要求:

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