我正在使用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!");
答案 0 :(得分:1)
我不知道任何用于序列化XML的工具,它可以让您对结果的确切布局进行大量控制。你为什么在乎?额外的空白可能在视觉上具有吸引力,但根据属性之间的空白区域,任何理智的XML消费应用程序的行为都不同。
(好吧,我这么说,但我注意到今天早上的另一个问题是尝试使用sed或awk处理XML。这超出了我对一个理智的XML消费应用程序的定义......)