Xml 当前元素文本中双大写文本的XPath不是子元素

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

这看起来很简单,但实际上很复杂。

我的XML如下所示:

<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),但如果你真的想要的话

  • 需要查找带双大写的标签,但不带in
    fnm
    标签
  • 然后使用以下XPath:

    //*[not(self::fnm) and text()[matches(., '[A-Z]{2}')]]
    

    …编辑您的问题后,我看到一个隐藏的
    标记:

  • 需要在
    标签中查找带双大写的标签,但不需要在
    fnm
    标签中查找
  • 我帮你修好了。(您必须使用
    `
    来避开标记并使其可见。)因此,显然您确实想要Martin发布的内容。

    可能是您想要的(+1),但如果您确实想要

  • 需要查找带双大写的标签,但不带in
    fnm
    标签
  • 然后使用以下XPath:

    //*[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}
    的比较。这也很有效。非常感谢。这也很有效,非常感谢