如何使用org.w3c.dom在属性之间添加新行。 JAVA中的xml

时间:2015-03-05 02:14:24

标签: java xml dom

我正在使用JAVA中的org.w3c.dom和javax.xml.parsers创建xml文件。但它给我的结果如下:

<rdf:RDF xmlns:esv="http://eresources.nlb.gov.sg/ID/NLBDM/vocab-esv/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:nlbdm="http://eresources.nlb.gov.sg/ID/NLBDM/vocab/" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
</rdf:RDF>

我需要的是将具有适当选项卡式缩进的属性放在每行的新行中。它应该如下所示:

<rdf:RDF
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:esv="http://eresources.nlb.gov.sg/ID/NLBDM/vocab-esv/"
    xmlns:nlbdm="http://eresources.nlb.gov.sg/ID/NLBDM/vocab/">
</rdf:RDF>

我在Stackoverflow上也发现了几个相同的问题,但在回答中他们建议更改xml解析器,我不想这样做。我可以使用现有的xml解析器执行相同的操作吗?我不认为,他们可能没有处理这样的小问题。

以下是我的代码的一部分:

// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

DOMSource source = new DOMSource(doc);

String tempFileName=file.getName();
tempFileName=tempFileName.substring(0,tempFileName.indexOf("."));

StreamResult result = new StreamResult(new File("C:/Users/Pratik/MapArticleURIWithNER/"+tempFileName+".rdf"));

// Output to console for testing
//StreamResult result = new StreamResult(System.out);

transformer.transform(source, result);

//System.out.println("File saved!");

1 个答案:

答案 0 :(得分:1)

我不知道任何用于序列化XML的工具,它可以让您对结果的确切布局进行大量控制。你为什么在乎?额外的空白可能在视觉上具有吸引力,但根据属性之间的空白区域,任何理智的XML消费应用程序的行为都不同。

(好吧,我这么说,但我注意到今天早上的另一个问题是尝试使用sed或awk处理XML。这超出了我对一个理智的XML消费应用程序的定义......)