我的XPath语法是否正确?

时间:2013-04-22 10:58:02

标签: java xml xpath xml-parsing

这是我的xml:

<?xml version="1.0" encoding="UTF-8"?>
       <check>
           <val>
              <Samsung>
                 <name value="galaxy" />
                 <name value="galaxy" />
                 <name value="galaxys" />
                 <id value="123" />
                 <id value="123" />
                 <name2 value="galaxy" />
             </Samsung>

             <htc>
                 <name value="galaxy" />
                 <name value="galaxy" />
                 <name value="galaxys" />
                 <id value="123" />
                 <id value="123" />
                 <name2 value="galaxy" />
    </htc>
</val>

我的Xpath表达式为:

XPathExpression expr = XPathFactory.newInstance().newXPath()
                .compile("//Samsung/name/@value");

在上面的xml <name value="galaxy" />中有副本,所以我试图删除重复项。但是在我的代码中我得到的节点是value =“galaxys”..我不应该删除它。什么应该是正确的XPath语法,所以我可以用它来删除重复项,它应该匹配元素和属性值(例如:)整个xml中的

2 个答案:

答案 0 :(得分:0)

表达式“// Samsung / name / @ value”返回'Samsung'节点下所有'name'节点的value属性,因此它应返回'galaxys'

如果你想把条件放到只返回value ='galaxy'的节点,你可以使用这个表达式 //三星/名称[@值= '星系'] /

答案 1 :(得分:0)

使用xml代码尝试以下内容:

           <val>
              <Samsung>
                 <name value="galaxy" />
                 <name value="galaxy" />
                 <name value="galaxys" />
                 <id value="123" />
                 <id value="123" />
                 <name2 value="galaxy" />
             </Samsung>

             <htc>
                 <name value="galaxy" />
                 <name value="galaxy" />
                 <name value="galaxys" />
                 <id value="123" />
                 <id value="123" />
                 <name2 value="galaxy" />
    </htc>
</val>

<强> XPATH:

//val/Samsung/child::*[@value = "galaxy"]

<强> 输出:

xpath