与当前节点属性值的末尾相比,是否可以提取元素的文本?
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}]'
我有一个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}]'