【问题标题】:Need to remove <?xml version="1.0" encoding="utf-16"?> from the xml需要从 xml 中删除 <?xml version="1.0" encoding="utf-16"?>
【发布时间】:2013-01-25 21:10:12
【问题描述】:

您好,我正在通过将 xsl 应用到 xml 输入来生成 xml。我需要没有这部分的输出"&lt;?xml version="1.0" encoding="utf-16"?&gt;"

输入--xml

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CreateResponse xmlns="http://jerseytelecom.com/">
    <CreateResult>
        <ISD_XMLGateway>
            <Entity>RIM_BPS</Entity>
         </ISD_XMLGateway>
    </CreateResult>
   </CreateResponse>
</soap:Body>
</soap:Envelope> 

我的 xsl

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:JT="http://jerseytelecom.com/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="JT">
         <xsl:output method="xml" indent="yes"/>
         <xsl:template match="/">
           <xsl:element name="Entity">
            <xsl:value-of select="soap:Envelope/soap:Body/JT:CreateResponse/JT:CreateResult/JT:ISD_XMLGateway/JT:Entity"/>  
            </xsl:element>
            </xsl:template>
            </xsl:stylesheet>

电流输出

   <?xml version="1.0" encoding="utf-16"?>
    <Entity>RIM_BPS</Entity>

预期输出

    <Entity>RIM_BPS</Entity>

【问题讨论】:

  • 为什么?所有有效的 XML 文档都必须以 XML 声明开头。
  • @SLaks:XML 声明在 XML 文件中是可选的,但是:Tip: Always use an XML declaration --(这不是必须而是应该
  • @SLaks 和 hakre - 如果是 XML 1.1 文件,则必须有 XML 声明。如果不包含声明,则文件只能是 XML 1.0。 w3.org/TR/xml11/#sec-prolog-dtdw3.org/TR/REC-xml/#sec-prolog-dtd
  • 它适合排除稍后将转换组合成更大的 XML 文档的声明。
  • @SLaks 想要去除 标记的一个原因是,如果您想输出文档的各个部分,而不是整个文档,然后再将它们组合起来。

标签: xml xslt xpath xslt-1.0


【解决方案1】:

尝试将omit-xml-declaration="yes" 属性添加到您的xsl:output 标记中。

它应该是这样的:

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />

【讨论】:

    【解决方案2】:

    把它放在你的 xslt 中

    <xsl:output method="xml" omit-xml-declaration="yes"/>
    

    极力推进

    <xsl:output method="text" />
    

    应该解决症状...

    虽然取决于处理器,但最后一个可能会产生重大影响。

    【讨论】:

      【解决方案3】:

      使用此 XSLT 从使用 XSLT 的 xml 文档中删除 encoding=“UTF-8”。在 Cdaata 部分中,您可以根据需要添加编码。干杯:)

      <?xml version="1.0" encoding="UTF-8" ?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:output method="xml" omit-xml-declaration="yes"/>
          <xsl:template match="/">
              <xsl:text disable-output-escaping="yes"><![CDATA[<?xml version="1.0"?>]]></xsl:text>
              <xsl:copy-of select="node()"/>
          </xsl:template>
      </xsl:stylesheet>
      

      【讨论】:

        【解决方案4】:

        这个完整的转变

        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:JT="http://jerseytelecom.com/" exclude-result-prefixes="soap JT">
        <xsl:output omit-xml-declaration="yes" indent="yes"
             encoding="utf-8"/>
         <xsl:template match="/">
          <Entity>
           <xsl:value-of select=
           "soap:Envelope/soap:Body/JT:CreateResponse
                      /JT:CreateResult/JT:ISD_XMLGateway/JT:Entity"/>
          </Entity>
         </xsl:template>
        </xsl:stylesheet>
        

        应用于提供的 XML 文档时:

        <?xml version="1.0" encoding="utf-8"?>
        <soap:Envelope
         xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body>
        <CreateResponse xmlns="http://jerseytelecom.com/">
            <CreateResult>
                <ISD_XMLGateway>
                    <Entity>RIM_BPS</Entity>
                 </ISD_XMLGateway>
            </CreateResult>
           </CreateResponse>
        </soap:Body>
        </soap:Envelope>
        

        产生想要的正确结果:

        <Entity>RIM_BPS</Entity>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-13
          • 2016-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          相关资源
          最近更新 更多