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

问题描述

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

我的 XML 如下:

<authors>
<au>
<fnm>XXY</fnm> MArio</au>
<au>
<fnm>Xxy</fnm> MArio</au>
<au>
<fnm>XXy</fnm> Mario</au>
</authors>

我的情况是

  1. 需要找到带有双大写的 <au> 标签,但不能使用 fnm 标签

基于上面的 XML 文件,应该找到前两个作者标签 au 而不是第三个 au

我已经尝试过 XPath 代码

//au[text()][matches(.,'[A-Z][A-Z]')] 

但它不起作用。

解决方法

我想你想要//au[text()[matches(.,'[A-Z]{2}')]]

,

Martin's XPath 可能是您想要的 (+1),但万一您真的

  1. 需要找到双大写的标签,但不能在 fnm 标签中找到

然后使用这个 XPath:

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

...编辑您的问题后,我看到一个隐藏的 <au> 标签:

  1. 需要找到带有双大写的 <au> 标签,但不能在 fnm 标签中找到

我为你解决了这个问题。 (您必须使用 `<au>` 来逃避标记并使其可见。)所以,很明显您确实想要 Martin 发布的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...