Xml 当前元素文本中双大写文本的XPath不是子元素
这看起来很简单,但实际上很复杂。 我的XML如下所示:Xml 当前元素文本中双大写文本的XPath不是子元素,xml,xslt,xpath,xslt-2.0,xpath-2.0,Xml,Xslt,Xpath,Xslt 2.0,Xpath 2.0,这看起来很简单,但实际上很复杂。 我的XML如下所示: <authors> <au> <fnm>XXY</fnm> MArio</au> <au> <fnm>Xxy</fnm> MArio</au> <au> <fnm>XXy</fnm> Mario</au> </authors> 但是它不起作用。我想你想要的是/au[text
<authors>
<au>
<fnm>XXY</fnm> MArio</au>
<au>
<fnm>Xxy</fnm> MArio</au>
<au>
<fnm>XXy</fnm> Mario</au>
</authors>
但是它不起作用。我想你想要的是
/au[text()[matches(,[A-Z]{2}')]
我想你想要的是/au[text()[matches(,[A-Z]{2}')]
可能是你想要的(+1),但如果你真的想要的话
fnm
标签//*[not(self::fnm) and text()[matches(., '[A-Z]{2}')]]
…编辑您的问题后,我看到一个隐藏的
标记:
标签中查找带双大写的标签,但不需要在fnm
标签中查找`
来避开标记并使其可见。)因此,显然您确实想要Martin发布的内容。可能是您想要的(+1),但如果您确实想要
fnm
标签//*[not(self::fnm) and text()[matches(., '[A-Z]{2}')]]
…编辑您的问题后,我看到一个隐藏的
标记:
标签中查找带双大写的标签,但不需要在fnm
标签中查找我帮你修好了。(您必须使用
`
来转义标记并使其可见。)因此,显然您确实想要Martin发布的内容。请注意fnm元素,其中text()应该与regexp匹配。因此,//au[fnm[matches(,'[A-Z]{2}')]]应该work@SiebeJongebloed,我不太明白你的评论与哪一个因素有关,我的建议选择前两个au
元素,因为它们具有与模式匹配的文本节点子元素。@SiebeJongebloed:您的反对是没有根据的:Martin的XPath将只选择具有与模式匹配的文本子元素的au
元素。@MartinHonnen:我的错误。重点是什么XXY@Yogib您可以使用:au[matches(text(),'[A-Z][A-Z]]]
。只是想说明问题出在括号中,而不是[A-Z][A-Z}
与[A-Z]{2}
之间的关系。请注意fnm元素,其中text()应该与regexp匹配。因此可能是://au[fnm[匹配(,'[A-Z]{2}')]应该work@SiebeJongebloed,我不太明白您的评论与哪个元素相关,我的建议选择前两个au
元素,因为它们具有与模式匹配的文本节点子元素。@SiebeJongebloed:您的反对是没有根据的:Martin的XPath将只选择具有与pat匹配的文本子元素的au
元素马丁霍宁:我错了,是因为XXY@Yogib你可以使用:au[matches(text(),'[A-Z][A-Z]]]]
。只是想说明问题出在括号上,而不是[A-Z][A-Z}
与[A-Z]{2}
的比较。这也很有效。非常感谢。这也很有效,非常感谢