0

这是我的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 中的元素和属性值(例如:)?

4

2 回答 2

0

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

如果您想将条件设置为仅返回 value='galaxy' 的节点,则可以使用此表达式 //Samsung/name[@value='galaxy']/

于 2013-04-22T11:47:13.463 回答
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>

路径:

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

输出:

路径

于 2013-04-22T12:20:13.030 回答