2014-11-14 75 views
1


我需要搜索某些屬性的XML並在發現該屬性時刪除其節點。例如,我想刪除這與開始的屬性書節點「#false」如果某個屬性具有特定值,則刪除XML節點

<catalog> 
    <book id="bk101" available="#false"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
</catalog> 

到目前爲止,我已經能夠捕獲所有「#false」使用XPath表達式的元素:

String search = "//@*[starts-with(.,'#false')]"; 
NodeList nodeList = (NodeList) xPath. 
       compile(search).evaluate(doc, XPathConstants.NODESET); 

((Node)nodeList.item(0)).getParent(); // NULL!! 

但問題是「可用」元素的父節點爲空,所以我找不到一種方法來刪除整個「書籍」節點。任何幫助?

回答

1

的屬性,使用Attr#getOwnerElement()檢索包含該屬性的元素:

NodeList nodeList = (NodeList) xPath. 
      compile(search).evaluate(doc, XPathConstants.NODESET); 

Node attrNode = nodeList.item(0); 
if(attrNode.getNodeType() == Node.ATTRIBUTE_NODE) { 
    Attr attr = (Attr) attrNode; 

    Element bookElement = attr.getOwnerElement(); 
    ... 
} 
+0

謝謝!正是我在找什麼! – user2824073 2014-11-14 13:55:03

1

您可以使用此XPath ..這將匹配與書元素本身

//*[@*[starts-with(.,'#false')]] 

我希望這會幫幫我!

相關問題