问题描述
这看起来很简单,但实际上很复杂。
我的 XML 如下:
<authors>
<au>
<fnm>XXY</fnm> MArio</au>
<au>
<fnm>Xxy</fnm> MArio</au>
<au>
<fnm>XXy</fnm> Mario</au>
</authors>
我的情况是
基于上面的 XML 文件,应该找到前两个作者标签 au
而不是第三个 au
我已经尝试过 XPath 代码
//au[text()][matches(.,'[A-Z][A-Z]')]
但它不起作用。
解决方法
我想你想要//au[text()[matches(.,'[A-Z]{2}')]]
。
Martin's XPath 可能是您想要的 (+1),但万一您真的
- 需要找到双大写的标签,但不能在
fnm
标签中找到
然后使用这个 XPath:
//*[not(self::fnm) and text()[matches(.,'[A-Z]{2}')]]
...编辑您的问题后,我看到一个隐藏的 <au>
标签:
- 需要找到带有双大写的
<au>
标签,但不能在fnm
标签中找到
我为你解决了这个问题。 (您必须使用 `<au>`
来逃避标记并使其可见。)所以,很明显您确实想要 Martin 发布的内容。