我使用javax.xml.transform.Transformer类将DOM源代码转换为XML字符串。我在DOM树中有一些空元素,这些元素变成了我不想要的标记。如何防止<sampletag></sampletag>变成<sampletag/>?
javax.xml.transform.Transformer
<sampletag></sampletag>
<sampletag/>
krugob8w1#
我也有同样的问题。这是得到那个结果的函数。
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 indexEnd = tmpStr.indexOf("/>"); if(indexEnd>-1){ String nameTag = tmpStr.substring(0, (indexEnd)); 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;}
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 indexEnd = tmpStr.indexOf("/>");
if(indexEnd>-1){
String nameTag = tmpStr.substring(0, (indexEnd));
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;
字符串
j7dteeu82#
如果你想控制XML的格式,提供你自己的ContentHandler来将XML修饰成“文本”。对于接收端(除非是人类)来说,它接收的是<name></name>还是<name/>都没有关系-它们都意味着同样的事情。
ContentHandler
<name></name>
<name/>
aydmsdu93#
这两种表示形式等价于XML解析器,所以这并不重要。如果您想使用XML解析器以外的任何东西来处理XML,那么无论如何,您最终都会做大量的工作并得到一个XML解析器。
rwqw0loc4#
如果您通过 NEEDS 发送的进程不需要自关闭元素(它不应该),您可以通过将内容放置在元素中来强制元素不自关闭。PDF转换器如何处理XML注解或处理指令?第一个月<sampletag><?SampleProcessingInstruction?></sampletag>个
<sampletag><?SampleProcessingInstruction?></sampletag>
wgmfuz8q5#
我在下面尝试防止将空标签转换为单个标签:Transformer tf = transformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.METHOD,“html”)它保留了空标签。
5条答案
按热度按时间krugob8w1#
我也有同样的问题。这是得到那个结果的函数。
字符串
j7dteeu82#
如果你想控制XML的格式,提供你自己的
ContentHandler
来将XML修饰成“文本”。对于接收端(除非是人类)来说,它接收的是<name></name>
还是<name/>
都没有关系-它们都意味着同样的事情。aydmsdu93#
这两种表示形式等价于XML解析器,所以这并不重要。
如果您想使用XML解析器以外的任何东西来处理XML,那么无论如何,您最终都会做大量的工作并得到一个XML解析器。
rwqw0loc4#
如果您通过 NEEDS 发送的进程不需要自关闭元素(它不应该),您可以通过将内容放置在元素中来强制元素不自关闭。
PDF转换器如何处理XML注解或处理指令?
第一个月
<sampletag><?SampleProcessingInstruction?></sampletag>
个wgmfuz8q5#
我在下面尝试防止将空标签转换为单个标签:
Transformer tf = transformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.METHOD,“html”)
它保留了空标签。