与当前节点属性值的末尾相比,是否可以提取元素的文本?

Is possible to extract the text of an element compared with the end of the value of an attribute of current node?

我有一个XML这样的

<Values>
    <Value ID="Contents01" Name="Contents 01" QualifierID="en-US">
        <Text>It is a test [{placeHolder01}]</Text>
    </Value>
    <Value ID="VarPlaceHolderValue01" Name="Var Place Holder 01" QualifierID="en-US">[{placeHolder01}]</Value>
    <Value ID="Contents02" Name="Contents 02" QualifierID="en-US">
        <Text>Some extra text.</Text></Value>
    <Value ID="PlaceHolder01" Name="PlaceHolder 01" QualifierID="en-US">
        <Text>For Whosebug</Text>
    </Value>
</Values>

可以通过表达式获取 PlaceHolderValue01 的 QualifierID,当前选定的节点为 PlaceHolder01。 所以这个想法是来自一个已经选择的节点。

//Values/Value[starts-with(@ID,'Var') and substring(./@ID, string-length(./@ID) - 2) = substring(@ID, string-length(@ID) - 2)]/text()

但是我在使用 xpath 检查器时遇到语法错误,它应该如何正确工作?

是否可以仅使用 xpath 来执行此操作?思路是提取元素VarPlaceHolderValue01的文本,知道以Var开头,以当前选中节点的相同数值结束?

在 iPython 试用:

首先,到select节点:

In [11]: root.xpath('//Value[starts-with(@ID, "PlaceHolder")]')
Out[11]: [<Element Value at 0x1094a1a00>]

接下来,分离出要匹配的字符串:

In [13]: root.xpath('substring-after(//Value[starts-with(@ID, "PlaceHolder")]/@ID, "PlaceHolder")')
Out[13]: '01'

接下来,匹配以“Var”开头的元素并提取其文本。

In [18]: root.xpath('string(//Value[starts-with(@ID, "Var") and  contains(@ID, substring-after(//Value[starts-with(@ID, "PlaceHolder")]/@ID, "PlaceHolder"))])')
Out[18]: '[{placeHolder01}]'