用Java修改XML

时间:2014-04-28 20:49:00

标签: java xml

我有一个XML文档,其Value标记中包含空值(类似于下面的内容)

  <ns2:Attribute Name="Store" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
         <ns2:AttributeValue/>
  </ns2:Attribute>

现在,我必须编写Java代码来修改值,如下所示。

  <ns2:Attribute Name="Store" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
         <ns2:AttributeValue>ABCDEF</ns2:AttributeValue>
  </ns2:Attribute>

我正在使用DOM解析器来解析XML。我能够删除“但不能添加新值的空标记。我甚至不确定我们是否有直接的方法来替换或添加值。

以下是我用来删除孩子的代码(“”)

    Node aNode = nodeList.item(i);
    eElement = (Element) aNode;
    eElement.removeChild(eElement.getFirstChild().getNextSibling());

提前致谢

1 个答案:

答案 0 :(得分:1)

只需通过setTextContent将数据添加到元素中。示例代码如下:

public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException, TransformerException {
    String xml = "<ns2:Attribute Name=\"Store\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><ns2:AttributeValue/></ns2:Attribute>";
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(new ByteArrayInputStream(xml.getBytes()));
    doc.getDocumentElement().normalize();
    NodeList nList = doc.getElementsByTagName("ns2:AttributeValue");
    for (int i=0;i<nList.getLength();i++) {
        Element elem = (Element)nList.item(i);
        elem.setTextContent("Content"+i);
    }
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(System.out);

    transformer.transform(source, result);



System.out.println(nList.getLength());
}