如何从xslt输出xml中删除xmlns =“”?

时间:2019-10-09 11:14:21

标签: xml xslt

我正在使用xslt从中生成xml文件。 问题是输出xml带有这样的名称空间:xmlns =“”。 我不想要它,因为beanio.org不适用于名称空间,如何从输出xml中删除xmlns =“”?     xslt              

    <xsl:template match="/">
        <beanio xmlns="http://www.beanio.org/2012/03"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

            <xsl:choose>
                <xsl:when test="/FeedFileConfig/@delimiter">
                    <xsl:element name="stream">
                        <xsl:attribute name="name">
                     <xsl:text>record</xsl:text>
                    </xsl:attribute>
                        <xsl:attribute name="format">
                     <xsl:text>csv</xsl:text>
                     </xsl:attribute>
                        <xsl:attribute name="ignoreUnidentifiedRecords">
                     <xsl:text>true</xsl:text>
                     </xsl:attribute>
                        <xsl:attribute name="xmlNamespace">
                     <xsl:text>http://www.beanio.org/2012/03</xsl:text>
                     </xsl:attribute>
                        <xsl:element name="parser">
                            <xsl:element name="property">
                                <xsl:attribute name="name">
                     <xsl:text>delimiter</xsl:text>
                    </xsl:attribute>
                                <xsl:attribute name="value">
                        <xsl:value-of select="/FeedFileConfig/@delimiter" />
                    </xsl:attribute>
                            </xsl:element>
                        </xsl:element>

                        <xsl:apply-templates />
                    </xsl:element>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:element name="stream">
                        <xsl:attribute name="name">
                         <xsl:text>record</xsl:text>
                    </xsl:attribute>
                        <xsl:attribute name="format">
                         <xsl:text>fixedlength</xsl:text>
                    </xsl:attribute>
                        <xsl:attribute name="ignoreUnidentifiedRecords">
                         <xsl:text>true</xsl:text>
                     </xsl:attribute>
                        <xsl:attribute name="xmlNamespace">
                     <xsl:text>http://www.beanio.org/2012/03</xsl:text>
                     </xsl:attribute>
                    </xsl:element>
                    <xsl:apply-templates />
                </xsl:otherwise>
            </xsl:choose>
        </beanio>
    </xsl:template>

    <xsl:template match="FeedFileConfig">
        <xsl:for-each select="/FeedFileConfig/Parsers/Parser">
            <xsl:element name="record">
                <xsl:attribute name="name">
                                  <xsl:value-of select="@name" />
                             </xsl:attribute>
                <xsl:attribute name="class">
                                  <xsl:value-of select="'map'" />
                             </xsl:attribute>
                <xsl:attribute name="xmlNamespace">
                     <xsl:text>http://www.beanio.org/2012/03</xsl:text>
                     </xsl:attribute>
                <xsl:for-each select="Fields/Field">
                    <xsl:variable name="varJsonPath">
                        <xsl:value-of select="replace(@jsonPath, '\$\.', '')" />
                    </xsl:variable>
                    <xsl:variable name="varIgnore">
                        <xsl:value-of select="@ignore" />
                    </xsl:variable>
                    <xsl:variable name="varLength">
                        <xsl:value-of select="@length" />
                    </xsl:variable>
                    <xsl:if test="@jsonPath != '$.recordType'">
                        <xsl:element name="field">
                            <xsl:attribute name="name">
                                                  <xsl:value-of select="$varJsonPath" />
                                             </xsl:attribute>
                            <xsl:if test="$varLength != ''">
                                <xsl:attribute name="length">
                                                  <xsl:value-of select="@length" />
                                             </xsl:attribute>
                            </xsl:if>
                            <xsl:if test="$varIgnore != ''">
                                <xsl:attribute name="ignore">
                                                      <xsl:value-of select="$varIgnore" />
                                                 </xsl:attribute>
                            </xsl:if>
                        </xsl:element>
                    </xsl:if>
                    <xsl:if test="@jsonPath = '$.recordType'">
                        <xsl:element name="field">
                            <xsl:attribute name="name">
                                                  <xsl:value-of select="$varJsonPath" />
                                             </xsl:attribute>
                            <xsl:attribute name="rid">
                                                  <xsl:value-of select="'true'" />
                                             </xsl:attribute>
                            <xsl:attribute name="regex">
                                                  <xsl:value-of
                                select="../../Filters/Filter/@regex" />
                                             </xsl:attribute>
                            <xsl:if test="$varLength != ''">
                                <xsl:attribute name="length">
                                                  <xsl:value-of select="@length" />
                                             </xsl:attribute>
                            </xsl:if>
                            <xsl:if test="$varIgnore != ''">
                                <xsl:attribute name="ignore">
                                            <xsl:value-of select="$varIgnore" />
                                        </xsl:attribute>
                            </xsl:if>
                        </xsl:element>
                    </xsl:if>
                </xsl:for-each>
            </xsl:element>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

我正在使用xslt从中生成xml文件。 问题是输出xml带有这样的名称空间:xmlns =“”。 我不想要它,因为beanio.org不适用于名称空间,如何从输出xml中删除xmlns =“”?

<?xml version="1.0" encoding="UTF-8"?>
<beanio xmlns="http://www.beanio.org/2012/03"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
   <stream name="record" format="csv" ignoreUnidentifiedRecords="true"
           xmlNamespace="http://www.beanio.org/2012/03">
      <parser>
         <property name="delimiter" value=";"/>
      </parser>
      <record xmlns="" name="asbmasteranddeltafile" class="map"
              xmlNamespace="http://www.beanio.org/2012/03">
         <field name="isin"/>
         <field name="status"/>
         <field name="instrumentCategory"/>
         <field name="issueDescription"/>
         <field name="cfiCode"/>
         <field name="fisn"/>
         <field name="preliminaryTermsProspectus"/>
         <field name="nominalValue"/>
         <field name="issueCurrency"/>
         <field name="smallestDenomination"/>
         <field name="conversionRatioContractSize"/>
         <field name="maturityExpirationDate"/>
         <field name="exercisePrice"/>
         <field name="exercisePriceCurrency"/>
         <field name="underlying"/>
         <field name="typeOfInterest"/>
         <field name="interestRate"/>
         <field name="interestPaymentDate"/>
         <field name="interestFrequency"/>
         <field name="firstInterestPaymentDate"/>
         <field name="additionalInformation"/>
         <field name="marketIdentifierCodeMic"/>
         <field name="leadManagerName"/>
         <field name="leadManagerLei"/>
         <field name="fundManagerName"/>
         <field name="fundManagerLei"/>
         <field name="centralSecurityDepositoryCsdNameCentralSecurityDepositoryCsdLei"/>
         <field name="issuerNameLong"/>
         <field name="issuerLei"/>
         <field name="issuerNameShort"/>
         <field name="issuerSupranational"/>
         <field name="issuerHeadquartersAddress1"/>
         <field name="issuerHeadquartersAddress2"/>
         <field name="issuerHeadquartersStateProvince"/>
         <field name="issuerHeadquartersPostCode"/>
         <field name="issuerHeadquartersCity"/>
         <field name="issuerHeadquartersCountry"/>
         <field name="issuerLegalRegistrationAddress1"/>
         <field name="issuerLegalRegistrationAddress2"/>
         <field name="issuerLegalRegistrationStateProvince"/>
         <field name="issuerLegalRegistrationPostCode"/>
         <field name="issuerLegalRegistrationCity"/>
         <field name="issuerLegalRegistrationCountry"/>
         <field name="createDate"/>
         <field name="modifyDate"/>
      </record>
   </stream>
</beanio>

我正在使用xslt从中生成xml文件。 问题是输出xml带有这样的名称空间:xmlns =“”。 我不想要它,因为beanio.org不适用于名称空间,如何从输出xml中删除xmlns =“”?

1 个答案:

答案 0 :(得分:1)

如果您希望所有结果元素都位于某个命名空间中,那么通常将相关的命名空间声明xmlns="http://www.beanio.org/2012/03"放在样式表<xsl:stylesheet xmlns="http://www.beanio.org/2012/03" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ...>的根元素上,而不是像您一样将其放置在单个模板中到目前为止,它仅适用于单个模板中的元素。