创建xml文件的缩进与添加相同子节点

来源:2-3 生成节点间的文本

脚踏地

2015-01-23 17:06

写出来xml文件怎么自动缩进啊,不仅仅是换行?还有怎么添加多个book节点啊?

写回答 关注

2回答

  • JessicaJiang
    2015-01-24 17:52:37

    缩进可以采用tab键,也可以使用xml专门的编辑器;

    添加多个book节点:

    <bookstore>

        <book>...</book>

        <book>...</book>

        <book>...</book>

        ....

    </bookstore>

    Jessic... 回复脚踏地

    缩进的话要看你采用什么方式生成xml,例如使用DOM4J的话,提供给你一个OutputFormat.createPrettyPrint()方法,这样生成的xml就是换行+缩进的; 如果是添加多个book结点,可以通过循环(for等)来进行添加。

    2015-02-27 12:24:17

    共 2 条回复 >

  • 脚踏地
    2015-01-27 15:30:29

    //之前之所以添加的book节点会覆盖前面的book节点,是因为变量名都相同,这样的话自然下面的要替换上面的值


    public static void main(String[] args) {
      new TestXml().createXml();
     }
     
     public void createXml(){
      DocumentBuilder db=getDocumentBuilder();
      Document document=db.newDocument();
      document.setXmlStandalone(true);
      Element books=document.createElement("books");
      document.appendChild(books);
      
    //  添加多个节点
      books.appendChild(getChildNode(document,"1","冰与火之歌","乔治马丁","39"));
      books.appendChild(getChildNode(document,"2","安徒生童话","安徒生","29"));
      
      TransformerFactory tff=TransformerFactory.newInstance();
      
      try {
       Transformer tf=tff.newTransformer();
       tf.setOutputProperty(OutputKeys.INDENT, "yes");

    //设置缩进量
       tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
       tf.transform(new DOMSource(document), new StreamResult(new File("lib/books1.xml")));
       
      } catch (TransformerConfigurationException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (TransformerException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
     
     public DocumentBuilder getDocumentBuilder(){
      DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
      DocumentBuilder db = null;
      try {
       db=dbf.newDocumentBuilder();
      } catch (ParserConfigurationException e) {
       e.printStackTrace();
      }
      return db;
     }
     
     public Element getChildNode(Document doc,String id,String name,String author,String price){
      Element childNode=doc.createElement("book");
      childNode.setAttribute("id", id);
      childNode.appendChild(getChildNodeElement(doc,"name",name));
      childNode.appendChild(getChildNodeElement(doc,"author",author));
      childNode.appendChild(getChildNodeElement(doc,"price",price));
      return childNode;
     }

     public Element getChildNodeElement(Document doc,String name,String text){
      Element element=doc.createElement(name);
      element.setTextContent(text);
      return element;
     }

    Raven1 回复Raven1

    仔细看了一下,以上代码已经是完成了缩进,添加相同节点名的操作。另外制造了函数,节点名变量放入到函数之后,就变成了局部变量,避免了在创建xml函数里直接添加同名节点时同名函数会覆盖前面的内容

    2016-07-22 02:38:02

    共 2 条回复 >

Java眼中的XML 文件写入

举例说明JAVA程序如何生成XML文档,多种生成方式任你选择

55804 学习 · 132 问题

查看课程

相似问题