Java 查找重复的XML元素名称(带变量的xPath)
在我的JAVA项目中,我正在使用XPath1.0解析器和CLiXML,我正在尝试设置CLiXML约束规则文件 如果在特定子元素下有重复的元素名称,我想显示一个错误 比如说Java 查找重复的XML元素名称(带变量的xPath),java,xml,xpath,Java,Xml,Xpath,在我的JAVA项目中,我正在使用XPath1.0解析器和CLiXML,我正在尝试设置CLiXML约束规则文件 如果在特定子元素下有重复的元素名称,我想显示一个错误 比如说 <parentNode version="1"> <childA version="1"> <ignoredChild/> </childA> <childB version="1"> <ignoredCh
<parentNode version="1">
<childA version="1">
<ignoredChild/>
</childA>
<childB version="1">
<ignoredChild/>
</childB>
<childC version="4">
<ignoredChild/>
</childC>
<childA version="2">
<ignoredChild/>
</childA>
<childD version="6">
<ignoredChild/>
</childD>
</parentNode>
childA出现了不止一次,所以我会显示一个错误
注意:我只想“检查/计数”元素名,而不是元素内部的属性或子元素
我尝试过的.clx规则文件中的代码是:
<forall var="elem1" in=".//parentNode/*">
<equal op1="count(.//parentNode/$elem1)" op2="1"/>
</forall>
但这不起作用,我得到了一个错误:
Caused by: class org.jaxen.saxpath.XPathSyntaxException: count(.//PLC-Mapping/*/$classCount: 23: Expected one of '.', '..', '@', '*', <QName>
原因:class org.jaxen.saxpath.XPathSyntaxException:count(.//PLC映射//*/$classCount:23:应为“.”、“..”、“@”和“*”中的一个,
因为我希望代码检查每个子名称,并使用子名称的名称运行另一个xPath查询-如果计数大于1,则应该给出一个错误
有什么想法吗?只需尝试获取具有适当路径表达式的子节点列表,并检查该列表中是否存在重复项:
XPathExpression xPathExpression = xPath.compile("//parentNode/*");
NodeList children = (NodeList) xPathExpression.evaluate(config, XPathConstants.NODESET);
for (int i = 0; i < children.getLength(); i++) {
// maintain hashset of clients here and check if element is already there
}
XPathExpression XPathExpression=xPath.compile(“//parentNode/*”);
NodeList children=(NodeList)xPathExpression.evaluate(配置,XPathConstants.NODESET);
for(int i=0;i
这不能用单个XPath 1.0表达式来完成(请参阅我今天回答的)
下面是一个XPath 2.0表达式(如果可以使用XPath 2.0):
这将选择作为XML文档顶部元素的子元素且多次出现的所有元素。我更新了我的问题,意识到我没有那么清楚。我不想在Java中执行自定义“约束”检查,我想在.CLX文件中设置它。@Dan2k3k4抱歉,没有给出是/否的显式XPath表达式马上回答。
/*/*[(for $n in name()
return count(/*/*[name()=$n])
)
>1
]