1

我有下一个附录:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:ecfd="http://www.southconsulting.com/schemas/strict">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <xsl:element name="cfdi:Addenda">
        <xsl:element name="requestForPayment">
            <xsl:attribute name="type">SimpleInvoiceType</xsl:attribute>
            <xsl:attribute name="contentVersion">1.3.1</xsl:attribute>
            <xsl:attribute name="documentStructureVersion">AMC7.1</xsl:attribute>
            <xsl:attribute name="documentStatus">ORIGINAL</xsl:attribute>
            <xsl:element name="requestForPaymentIdentification">
                <xsl:text>1</xsl:text>
            </xsl:element>
        </xsl:element>
    </xsl:element>
</xsl:template>

我的问题出在节点上:

<xsl:element name="cfdi:Addenda">

因为当我运行附录时,命名空间:

xmlns:cfdi="http://www.sat.gob.mx/cfd/3"

它放在节点的位置,我在这个地方不需要这个命名空间。这种方式:

<cfdi:Addenda xmlns:cfdi="http://www.sat.gob.mx/cfd/3"></cfdi:Addenda>

我需要这种方式:

<cfdi:Addenda></cfdi:Addenda>

有什么建议么?????

我尝试添加以下说明:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:ecfd="http://www.southconsulting.com/schemas/strict" exclude-result-prefixes="cfdi">

<xsl:element name="cfdi:Addenda" namespaces="">

并且这条指令有效,但是当这个 XSLT 模板将捕获 XML 文档时删除节点开始,如下所示:

<Addenda></Addenda>

用这个 XSLT 输出(我不想要这个):

    <?xml version="1.0" encoding="UTF-8"?>
<cfdi:Addenda xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
    <requestForPayment type="SimpleInvoiceType" contentVersion="1.3.1" documentStructureVersion="AMC7.1" documentStatus="ORIGINAL">
        <requestForPaymentIdentification>1</requestForPaymentIdentification>
    </requestForPayment>
</cfdi:Addenda>

我希望是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
<cfdi:Addenda>
    <requestForPayment type="SimpleInvoiceType" contentVersion="1.3.1" documentStructureVersion="AMC7.1" documentStatus="ORIGINAL">
        <requestForPaymentIdentification>1</requestForPaymentIdentification>
    </requestForPayment>
</cfdi:Addenda>
4

1 回答 1

1

您无法使用 XSLT 生成您正在寻找的输出,因为它不是名称空间格式良好的,而且 XSLT 总是在名称空间格式正确的 XML 上运行。如果要使用带前缀的元素名称,则序列化程序必须添加适当的命名空间声明才能产生合法的输出。

即使有办法产生该输出,我仍然强烈建议不要这样做,因为任何其他试图使用数据的 XML 工具都会抱怨未声明的命名空间。

于 2013-10-08T21:54:46.860 回答