2011-10-27 114 views
3

這裏是我的XML:設置屬性的XML /節點

<root> 
    <A id='1'> 
    <B>Blah</B> 
    <C>Test</C> 
    </A> 
</root> 

我想下添加,所以我最終的XML想:

<root> 
    <A id='1'> 
    <B>Blah</B> 
    <C>Test</C> 
    <D>New value</D> 
    </A> 
</root> 

我可以用得到的節點的XPath //A,我不知道如何添加或編輯值,一旦我得到節點。

+2

有很多類似的問題,請您先環顧四周。您使用哪些技術,以及新節點的價值如何?知道這一點很重要。你使用SAX,StAX,DOM,JDOM ......嗎?解析,使用XSLT進行轉換,與JAXB綁定? –

+0

我正在使用DOM。我沒有使用XSLT。 – ed1t

回答

4
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
StringReader xml = new StringReader("<root><A id='1'><B>Blah</B><C>Test</C></A></root>"); 
Document doc = db.parse(new InputSource(xml)); 
XPathFactory xPathfactory = XPathFactory.newInstance(); 
XPath xpath = xPathfactory.newXPath(); 
XPathExpression expr = xpath.compile("//A"); 
Element element = doc.createElement("D"); 
element.setTextContent("new value"); 
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
for(int i = 0; i < nodes.getLength(); i++) { 
    Node node = nodes.item(i); 
    node.appendChild(element); 
} 
0

檢查來自DOM的Node接口的this methodElement對此進行了擴展,因此您首先需要獲取A的元素。在Document實例上使用this method,或者使用其他合適的方法創建所需的D元素,然後設置其內容。

0

除了直接使用DOM API,你也可以使用jOOX,一個簡單的包裝庫DOM,我創建:

// With css-style selectors 
$(document).find("A").append("<D>New value</D>"); 

// With XPath 
$(document).xpath("//A").append("<D>New value</D>");