2013-04-22 99 views
0

這是我的xml:我的XPath語法是否正確?

<?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" />都有份,所以我試圖刪除重複。但在我的代碼中得到的節點值=「galaxys」..我不應該刪除。另外什麼應該是正確的XPath語法,所以我可以用它來刪除重複項,它應該在整個xml中匹配元素和屬性值(例如:)

+0

http://stackoverflow.com/questions/355691/how-to-remove-duplicate-xml-nodes-使用-xslt – 2013-04-22 11:08:03

+0

它不起作用。另外在我的XML我需要匹配元素名稱和屬性值。 – knix2 2013-04-22 11:18:15

回答

0

表達「//三星/名/ @值」返回所有「名稱」節點下的「三星」節點的值屬性,所以應該返回「GALAXYS」如果你想要把標準只是返回

與節點值= '星系' 可以使用此表達 //三星/名稱[@值= '星系']/

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

+0

我用類似的犯法遞歸。你能看看這個嗎? http://stackoverflow.com/questions/16167059/small-issue-with-deleting-duplicates-in-xml-using-java – knix2 2013-04-23 12:50:20