java DOM xml文件创建 - 输出文件中没有制表符或空格

16 浏览
0 Comments

java DOM xml文件创建 - 输出文件中没有制表符或空格

我已经浏览了stackoverflow上的帖子,但似乎没有什么帮助。

以下是我目前拥有的代码:

            // 将内容写入xml文件
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        transformerFactory.setAttribute("indent-number", 2);
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        DOMSource source = new DOMSource(xmlDoc);
        StreamResult result =  new StreamResult(new File("C:\\testing.xml"));
        transformer.transform(source, result);

这是我得到的输出结果:























没有制表符也没有空格。

我设置了indent-number是因为可能是Java的一个bug,我还激活了OutputKeys.INDENT。

还有其他的想法吗?

编辑1(在adarshr修复之后):

现在有了空格。只有第一个Satellite条目被放在第一行,这不应该是这样的。


  
    
      
        
          
            
              
                
                  
                    blah
                  
                
              
            
          
        
      
    
  
  

编辑2:

所以当前的状态是,我现在有了空格,但在XML声明之后没有换行符。我该如何解决这个问题?

0
0 Comments

问题原因:问题出现的原因是TransformerFactory或Transformer类的实现与Java的预期不同。

解决方法:需要设置一个系统属性来解决该问题。设置方法如下:

System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.xsltc.trax.TransformerFactoryImpl");

然后,需要在classpath中添加Apache Xalan JAR文件。

可能存在的问题:在更改后出现了一个异常,异常信息为:javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.xsltc.trax.TransformerFactoryImpl not found。这说明需要在classpath中添加Apache Xalan JAR文件。

可能的解决方法:确认是否已将Apache Xalan JAR文件添加到classpath中。如果已添加但仍出现异常,可能需要查看文件路径是否正确。

问题的根本原因是TransformerFactory或Transformer类的实现与Java的预期不同。通过设置系统属性并添加Apache Xalan JAR文件到classpath中,可以解决该问题。

0
0 Comments

问题的原因是使用Java DOM创建XML文件时,输出文件中没有缩进或空格。解决方法是设置缩进量。

通过设置缩进量的方式来解决这个问题:

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

然而,尝试了这种方法后,输出结果与之前相同。

接下来询问是否包含外部的xalan实现,建议尝试使用JDK内置的实现。

尝试了没有xalan的情况,但抛出了异常。在这之后,注意到命令中包含了apache的url,所以推测这个命令只能与xalan一起使用。

0
0 Comments

问题出现的原因是没有在输出文件中添加制表符或空格。解决方法是使用Transformer类的OutputProperties属性,设置indent属性为"yes",表示输出文件时添加缩进。下面是一个解决该问题的示例代码:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CreateXML {
    public static void main(String[] args) {
        try {
            // 创建DOM文档对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            
            // 创建根元素
            Element rootElement = document.createElement("root");
            document.appendChild(rootElement);
            
            // 创建子元素
            Element childElement = document.createElement("child");
            rootElement.appendChild(childElement);
            
            // 创建Transformer对象
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            
            // 设置输出属性
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            
            // 将DOM对象转换为XML文件
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(System.out); // 输出到控制台
            transformer.transform(source, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用以上代码,输出的XML文件将包含缩进,使其更易读。

0