如何在xPath中检查IDREFS计数是否大于1

时间:2013-06-07 15:28:39

标签: xpath dtd

在将此标记为重复之前,我需要 xpath 表达式而不是 xquery 表达式。所以这对我没有帮助:How to check IDREFS length in xPath

另外,我尝试使用id函数,如下所示:xpath: contains() for a group of answers 但这只会为我返回空结果。

如果重要的话,我正在使用Notpad ++的xml插件。

我有下一个DTD定义

<!ELEMENT testNode EMPTY>
<!ATTLIST testNode
      listOfNodes IDREFS #REQUIRED
      bestNode IDREF #REQUIRED
>

当我得到/testNode/@listOfNodes时,我必须检查listOfNodes中是否有多个参考号。我怎么能这样做?

谢谢!

2 个答案:

答案 0 :(得分:1)

xpaht-1.0的一种可能性是:
检查属性中有多少个分隔符(空格)。这可以通过原始字符串的长度减去没有空格的字符串的长度来完成。

string-length( testNode/@listOfNodes) - string-length( translate(/testNode/@listOfNodes,' ',''))

因此你测试的是:

string-length( testNode/@listOfNodes) - string-length( translate(/testNode/@listOfNodes,' ','')) +1 > 1 

答案 1 :(得分:0)

要查找仅包含一个令牌的属性,我会使用//testNode/@listOfNodes[not(contains(.,' ')] - 如果我被判处在未经验证的环境中工作,则会更改为//testNode/@listOfNodes[not(contains(normalize-space(.),' ')]。要查找包含多个IDREF令牌的匹配项,请删除not()