【问题标题】:How to add an element in this XML file using DOM parser?如何使用 DOM 解析器在此 XML 文件中添加元素?
【发布时间】:2014-01-25 21:14:15
【问题描述】:

我想知道如何修改这个 XML 文件,

<?xml version="1.0"?>
<nombre>
    <id>12345</id>
</nombre>

使用 Java 中的 DOM 解析器将其转换为这样的 XML 文件,

<?xml version="1.0" encoding="UTF-8" ?>
    <heat>2013-09-09</heat>
    <nombre>
      <id>12345</id>
    </nombre>

我试过了,但是不行,

public class Test {

public static final String xmlFilePath = "src/vnx.xml";
public static final String xml2FilePath = "src/input2.xml";

public static void main(String argv[]) {

    try {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse(xmlFilePath);

        Element version = document.createElement("heat");
        version.appendChild(document.createTextNode("2013-09-09"));
        document.appendChild(version);



        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();
        DOMSource domSource = new DOMSource(document);

        StreamResult streamResult = new StreamResult(new File(xml2FilePath));
        transformer.transform(domSource, streamResult);


    } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
    } catch (TransformerException tfe) {
        tfe.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } catch (SAXException sae) {
        sae.printStackTrace();
    }
}

}

它返回一个解析错误。任何建议都会非常有帮助。非常感谢!

【问题讨论】:

  • 我已经编辑了我的问题。谢谢!

标签: java javascript xml parsing dom


【解决方案1】:

在阅读您的代码之前,我发现您的 XML 文件存在问题。

一个xml文件应该只包含一个根,在你的情况下,正确的文件可能是这样的:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <heat>2013-09-09</heat>
    <nombre>
      <id>12345</id>
    </nombre>
</root>

【讨论】:

  • 例如,您将如何将此 json 转换为 xml?你应该添加一个根吗? { "array": [ 1, 2, 3 ], "boolean": true, "null": null, "number": 123, "object": { "a": "b", "c": "d ", "e": "f" }, "string": "Hello World" }
  • @user3167333 我不知道json,一个链接可以帮助你:answers.oreilly.com/topic/…
【解决方案2】:

试试这个代码,我使用 Xpath 导航 XML 并创建了新节点并附加到 XML。

或者没有 XPATH 你也可以做到。 以下代码没有 Xpath。Xpath 代码在注释中

 try {
    File inputFile = new File("src/vnx.xml");
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    // creating input stream
    Document doc = builder.parse(inputFile );

    //Xpath compiler
    //XPathFactory xpf = XPathFactory.newInstance();
    // XPath xpath = xpf.newXPath();

    //XPath Query
   // XPathExpression expr = xpath.compile("/");
    //Node attributeElement = (Node) expr.evaluate(doc, XPathConstants.NODE);

    //New Node          
    Node childnode=doc.createElement("heat");        
    doc .appendChild(childnode);
    childnode.setTextContent("12-34-56");

    // writing xml file
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
     File outputFile = new File("src/input2.xml");
    StreamResult result = new StreamResult(outputFile );
    // creating output stream
    transformer.transform(source, result);
    } catch (Exception e) {
        e.printStackTrace();
    }

如果找不到文件,请检查您的 XML 文件的路径 谢谢

【讨论】:

  • 它返回此错误:XML Parsing Error: junk after document element Location: file:///home/jd/workspace/Parser/src/input2.xml 第 143 行,第 7 列:名称>12-34-56热> ------^
  • 请检查源文件和输出文件必须不同。为了更好地删除input2.xml并重新运行程序
【解决方案3】:

试试这个:

try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory
                .newInstance();

        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        /* create root elements */
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("root");
        doc.appendChild(rootElement);

        /* create elements */
        Element heat= doc.createElement("Heat");
        heat.setAttribute("heat", "2013-09-09");
        rootElement.appendChild(heat);


        Element number= doc.createElement("number");
        rootElement.appendChild(number);

        /* create child node and add id elements */
        Element id= doc.createElement("ID");
        id.setAttribute("id", "12345");
        number.appendChild(id);


        /* write the content into xml file */
        TransformerFactory transformerFactory = TransformerFactory
                .newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        /* set source and result */
        DOMSource source = new DOMSource(doc);


        StreamResult result = new StreamResult(new File("input2.xml"));

        transformer.transform(source, result);
        return true;
    } catch (ParserConfigurationException pce) {
        LOGGER.error("exception while creating Xml File", pce);
        return false;
    } catch (TransformerException tfe) {
        LOGGER.error("exception while creating Xml File", tfe);
        return false;
    } catch (Exception e) {
        LOGGER.error("exception while creating Xml File", e);
        return false;
    }

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多