我正在使用 Eclipse 运行 XSL 2.0 (XPATH 2.0),并且我有以下源:
<testTop>
<Level1 id="abc" Text="from 1-2"/>
<Level1 id="pqr" Text="from 3-44" />
<Level1 id="xyz" Text="from 49-101" />
</testTop>
当我在 Eclipse 中测试以下表达式时,//*[matches(@Text, '\d+-\d+')]
我得到了正确的节点,但没有得到文本属性本身
Level1 ID=abc
Level1 ID=pqr
Level1 ID=xyz
...而//@Text
给我文本属性。谁能帮我理解为什么?我想获取 Text 属性值并使用字符串函数解析它们。最终结果应如下所示:
<output originalText="from 1-2" value1="1" value2="2" />
我不应该获取属于每个匹配节点的所有属性吗?
最佳答案
您的 XPath 正在选择具有您想要的属性的元素。如果您想选择与您的模式匹配的 @Text
,则需要调整 XPath 以选择属性而不是元素。
您可以使用此 XPath:
//*[matches(@Text, '\d+-\d+')]/@Text
或者这个XPath:
//*/@Text[matches(., '\d+-\d+')]
关于function - XPATH匹配函数问题——有效但无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812528/