需要从XML中删除 <?xml version="1.0" encoding="utf-16"?>。

32

您好,我正在将XSL应用于XML输入以生成XML。 我需要在输出中去掉此部分"<?xml version="1.0" encoding="utf-16"?>"

输入 - 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>

2
为什么?所有有效的XML文档都必须以XML声明开头。 - SLaks
2
@SLaks:XML文件中的XML声明是可选的,但是:提示:始终使用XML声明 --(它不是“必须”,而是“应该”) - hakre
1
@SLaks和hakre-如果它是XML 1.1文件,则必须有XML声明。如果未包含声明,则该文件只能是XML 1.0。http://www.w3.org/TR/xml11/#sec-prolog-dtd和http://www.w3.org/TR/REC-xml/#sec-prolog-dtd。 - Daniel Haley
1
在将转换后的内容组装到更大的XML文档中时,可以排除声明部分。 - StingyJack
1
@SLaks 想要去掉 <?xml> 标签的一个原因是,如果您想要输出文档的某些部分而不是整个文档,并将它们后来组合在一起。 - Matthew
显示剩余5条评论
4个回答

44

尝试在你的 xsl:output 标签中添加 omit-xml-declaration="yes" 属性。

然后它应该像这样:

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

15
把这个放进你的XSLT中。
<xsl:output method="xml" omit-xml-declaration="yes"/>

或者

在极限情况下

<xsl:output method="text" />

应该解决症状...

然而,最后一条可能会对处理器产生重要影响。


5
使用这个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>

2

这是一个全面的转变:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接