【问题标题】:How to prevent xml transformer to transform empty tags into single tag如何防止xml转换器将空标签转换为单个标签
【发布时间】:2011-04-14 16:25:48
【问题描述】:

我正在使用javax.xml.transform.Transformer 类将 DOM 源转换为 XML 字符串。我在 DOM 树中有一些空元素,这些元素成为我不想要的一个标签。

如何防止<sampletag></sampletag> 变成<sampletag/>

【问题讨论】:

  • 你为什么不想要它?它们都是有效的。
  • @Bozho 正则表达式。我想我们知道如果你使用正则表达式来解析 XML 会发生什么。
  • 你是说,从变成
  • @Tom:是的,有人问了一个关于 SO 的新问题。 ;)

标签: java xml transformer


【解决方案1】:

如果您想控制 XML 的格式,请提供您自己的ContentHandler 以将 XML 美化为“文本”。接收端(除非是人类)接收<name></name> 还是<name/> 都无关紧要——它们的含义相同。

【讨论】:

  • 这个xml然后会被转换成pdf,我对pdf转换器方法没有任何控制,所以我需要标签来保存它们的使用。
【解决方案2】:

这两种表示相当于一个XML解析器,所以没关系。

如果你想用 XML 解析器以外的任何东西来处理 XML,你最终会得到很多工作和一个 XML 解析器。

【讨论】:

    【解决方案3】:

    如果您通过 NEEDS 发送该元素的进程不会自动关闭(它不应该),您可以通过将内容放置在它。

    PDF转换器如何处理XML cmets或处理指令?

    <sampletag>!<--Sample Comment--></sampletag>

    <sampletag><?SampleProcessingInstruction?></sampletag>

    【讨论】:

      【解决方案4】:

      我也遇到过同样的问题。 这是获得该结果的函数。

      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;
      }
      

      【讨论】:

        【解决方案5】:

        我在下面尝试防止将空标签转换为单个标签:

        变压器 tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.METHOD,"html")

        它保留了空标签。

        【讨论】:

          猜你喜欢
          • 2013-12-05
          • 2012-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-28
          • 2018-12-26
          • 2017-12-25
          • 1970-01-01
          相关资源
          最近更新 更多