【问题标题】:Empty XML is created while using DOM to create XML使用 DOM 创建 XML 时会创建空 XML
【发布时间】:2017-05-30 12:43:22
【问题描述】:

我正在尝试使用 DOM Parser 创建一个 xml。下面是我创建 XML 的代码。但我得到一个只有 xml 版本的 xml,如下所示:

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>

生成xml的代码如下:

private void createTestngXML() throws Exception {
    try {
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.newDocument();
        document.setXmlVersion("1.0");

        Element root = document.createElement("suite");
        root.setAttribute("name", "MasterDataSuite");
        root.setAttribute("verbose", "1");

        Element testnode = document.createElement("test");
        testnode.setAttribute("name", "MasterDataTests");
        root.appendChild(testnode);

        Element classesNode = document.createElement("classes");
        testnode.appendChild(classesNode);

        Element classNode = document.createElement("class");
        classNode.setAttribute("com.test.suite.TestSuite1.java");
        classesNode.appendChild(classNode);

        Element classNode = document.createElement("class");
        classNode.setAttribute("com.test.suite.TestSuite2.java");
        classesNode.appendChild(classNode);

        document.appendChild(root);

        DOMSource source = new DOMSource(document);
        TransformerFactory transformerFactory = 
        TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        StreamResult result = new StreamResult(new File("D:\\testng.xml"));
        transformer.transform(source, result);
    } catch (Exception ex) {
        throw ex;
    }
}

但是创建的节点不是在xml文件中生成的。我做错了什么?

【问题讨论】:

    标签: java xml dom xml-parsing


    【解决方案1】:

    您的示例出现编译错误。

    试试下面的工作示例,

    public static void main(String[] args) {
    
              try {
                 DocumentBuilderFactory dbFactory =
                 DocumentBuilderFactory.newInstance();
                 DocumentBuilder dBuilder = 
                    dbFactory.newDocumentBuilder();
                 Document doc = dBuilder.newDocument();
                 // root element
                 Element rootElement = doc.createElement("cars");
                 doc.appendChild(rootElement);
    
                 //  supercars element
                 Element supercar = doc.createElement("supercars");
                 rootElement.appendChild(supercar);
    
                 // setting attribute to element
                 Attr attr = doc.createAttribute("company");
                 attr.setValue("Ferrari");
                 supercar.setAttributeNode(attr);
    
                 // carname element
                 Element carname = doc.createElement("carname");
                 Attr attrType = doc.createAttribute("type");
                 attrType.setValue("formula one");
                 carname.setAttributeNode(attrType);
                 carname.appendChild(
                 doc.createTextNode("Ferrari 101"));
                 supercar.appendChild(carname);
    
                 Element carname1 = doc.createElement("carname");
                 Attr attrType1 = doc.createAttribute("type");
                 attrType1.setValue("sports");
                 carname1.setAttributeNode(attrType1);
                 carname1.appendChild(
                 doc.createTextNode("Ferrari 202"));
                 supercar.appendChild(carname1);
    
                 // write the content into xml file
                 TransformerFactory transformerFactory =
                 TransformerFactory.newInstance();
                 Transformer transformer =
                 transformerFactory.newTransformer();
                 DOMSource source = new DOMSource(doc);
                 StreamResult result =
                 new StreamResult(new File("D:\\cars.xml"));
                 transformer.transform(source, result);
                 // Output to console for testing
                 StreamResult consoleResult =
                 new StreamResult(System.out);
                 transformer.transform(source, consoleResult);
              } catch (Exception e) {
                 e.printStackTrace();
              }
           }
    

    【讨论】:

    • 添加“document.appendChild(root);”到您的样品。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2011-01-15
    相关资源
    最近更新 更多