简体   繁体   English

如何向根节点添加属性

[英]How to add an attribute to the root node

I have an xml as String 我有一个XML作为String

<color>
    <name>black</name>
<color>

I want to add an attribute to root node and save a xml as String again. 我想向根节点添加一个属性,然后再次将xml保存为String。

<color id="1">
    <name>black</name>
<color>

But I can't. 但是我不能。 Here is my code 这是我的代码

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

String xml = "<color><name>black</name></color>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
Document document = builder.parse(is);
Element element = (Element) document.getFirstChild();
element.setAttribute("id", "1");
String result = document.toString();
System.out.println(result);

The output is [#document: null]. 输出为[#document:null]。 Help me please resolve my problem 帮我解决我的问题

You can not use document.toString() to get output. 您不能使用document.toString()获取输出。 You need to convert document object back to xml string. 您需要将文档对象转换回xml字符串。 Please check following code. 请检查以下代码。 It will help to solve your problem. 这将有助于解决您的问题。

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class test1 {

    public static void main(String[] args) throws SAXException, IOException,
            ParserConfigurationException {
        final String xmlStr = "<color><name>black</name></color>";
        Document doc = convertStringToDocument(xmlStr);

        String str = convertDocumentToString(doc);
        System.out.println(str);
    }

    private static Document convertStringToDocument(String xmlStr)
            throws SAXException, IOException, ParserConfigurationException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(xmlStr));
        Document document = builder.parse(is);
        Element element = (Element) document.getFirstChild();
        element.setAttribute("id", "1");
        String result = document.toString();
        System.out.println(result);
        return document;

    }

    private static String convertDocumentToString(Document doc) {
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer;
        try {
            transformer = tf.newTransformer();
            StringWriter writer = new StringWriter();
            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            String output = writer.getBuffer().toString();
            return output;
        } catch (TransformerException e) {
            e.printStackTrace();
        }

        return null;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM