是否有将DOM Parser Empty表示法从短到长的形式更改?
我需要
<book></book>
而非书籍
<book/>
我们有一个第三方XML阅读器,它不能用于短符号。我的所有XML对象都是DOM。最好的办法是什么?
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(XMLFile);
transformer.transform(source, result);
由于
答案 0 :(得分:2)
嗯,这是一个猜测:在变换器上将输出属性设置为“html”可能会这样做,因为html无法识别短路空标签(我认为)。
transformer.setOutputProperty(OutputKeys.METHOD, "html");
注意:未经测试!
更新:
我刚刚确认它有效。这个片段:
String xml = "<root><a/></root>";
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new ByteArrayInputStream(xml.getBytes()));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.METHOD, "html");
t.transform(new DOMSource(doc), new StreamResult(System.out));
生成此输出:
<root>
<a></a>
</root>
答案 1 :(得分:1)
我也有同样的问题。 这是获得该结果的功能。
public static String fixClosedTag(String rawXml){
LinkedList<String[]> listTags = new LinkedList<String[]>();
String splittato[] = rawXml.split("<");
String prettyXML="";
int counter = 0;
for(int x=0;x<splittato.length;x++){
String tmpStr = splittato[x];
int indiceEnd = tmpStr.indexOf("/>");
if(indiceEnd>-1){
String nameTag = tmpStr.substring(0, (indiceEnd));
String oldTag = "<"+ nameTag +"/>";
String newTag = "<"+ nameTag +"></"+ nameTag +">";
String tag[]=new String [2];
tag[0] = oldTag;
tag[1] = newTag;
listTags.add(tag);
}
}
prettyXML = rawXml;
for(int y=0;y<listTags.size();y++){
String el[] = listTags.get(y);
prettyXML = prettyXML.replaceAll(el[0],el[1]);
}
return prettyXML;
}