gpt4 book ai didi

xslt - "xmlns:xmlns"正在使用 XSLT 添加到 xml 输出文件中,并且 exclude-result-prefixes= "sii"没有从元素中排除命名空间

转载 作者:行者123 更新时间:2023-12-04 17:02:18 26 4
gpt4 key购买 nike

我的要求是转换以下 xml 文件:

     <?xml version="1.0" encoding="UTF-8"?>
<JEES_SSI>
<P_VAT_ID>10122</P_VAT_ID>
<LIST_G_LE_DETAILS>
<G_LE_DETAILS>
<ENTITYNAME>LE NAME</ENTITYNAME>
<TAXPAYEID>A0000000A</TAXPAYEID>
</G_LE_DETAILS>
</LIST_G_LE_DETAILS>
</JEES_SSI>

到新的 xml 文件 :( 所需的输出: )
 <?xml version="1.0" encoding="UTF-8"?>
<siiLR:SuministroLRFacturasRecibidas
xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:sii="https://www.secondschema/sinfo.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.firstschema/ SLR.xsd">
<sii:Cabecera>
<sii:Titular>
<sii:NombreRazon>LE NAME</sii:NombreRazon>
<sii:NIF>A0000000A</sii:NIF>
</sii:Titular>
</sii:Cabecera>
</siiLR:SuministroLRFacturasRecibidas>

我正在使用以下 XSL:
    <?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:sii="https://www.secondschema/sinfo.xsd"
exclude-result-prefixes="sii">

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

<xsl:template match="/">
<xsl:element name="siiLR:SuministroLRFacturasRecibidas">
<xsl:attribute name="xmlns:siiLR"> <xsl:value-of select= "'https:/www.firstschema/SLR.xsd'" /></xsl:attribute>
<xsl:attribute name="xmlns:sii"> <xsl:value-of select= "'https://www.secondschema/sinfo.xsd'"/></xsl:attribute>
<xsl:attribute name="xsi:schemaLocation"> <xsl:value-of select= "'https://www.secondschema/ sinfo.xsd'" /> </xsl:attribute>


<xsl:element name="sii:Cabecera">

<xsl:element name="sii:Titular">
<xsl:element name="sii:NombreRazon"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </xsl:element>
<xsl:element name="sii:NIF"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>



我得到的输出:

输出有额外的字符串
xmlns:xmlns="http://www.w3.org/2000/xmlns/"导致错误:
XML 解析错误:不得声明或未声明保留前缀 (xmlns)
并且正在为 sii 命名空间的第一个元素添加命名空间。
    <?xml version = '1.0' encoding = 'UTF-8'?>
<siiLR:SuministroLRFacturasRecibidas xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:xmlns="http://www.w3.org/2000/xmlns/"
xmlns:sii="https://www.secondschema/sinfo.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.firstschema/ SLR.xsd">
<sii:Cabecera xmlns:sii="https://www.secondschema/sinfo.xsd">
<sii:Titular>
<sii:NombreRazon>LE NAME</sii:NombreRazon>
<sii:NIF>A0000000A</sii:NIF>
</sii:Titular>
</sii:Cabecera>
</siiLR:SuministroLRFacturasRecibidas>

请帮助更正 xsl 文件以获得所需的 xml 输出文件。
有两个不同的命名空间前缀(siiLr 和 sii)用于 xml 文件中的元素。
exclude-result-prefixes="sii"没有从 sii:Cabecera 中排除命名空间 URI

修改过的 XLS(实现建议@Stefan Hegny 建议:
问题:xmlns:xmlns="http://www.w3.org/2000/xmlns/"不再出现,如果
我使用以下 XSL。(从根元素中删除 xmlns:siiLR 和 xmlns:sii 属性)
    <?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:sii="https://www.secondschema/sinfo.xsd"
>

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

<xsl:template match="/">
<xsl:element name="siiLR:SuministroLRFacturasRecibidas">
<xsl:attribute name="xsi:schemaLocation"> <xsl:value-of select= "'https://www.secondschema/ sinfo.xsd'" /> </xsl:attribute>
<xsl:element name="sii:Cabecera">
<xsl:element name="sii:Titular">
<xsl:element name="sii:NombreRazon"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </xsl:element>
<xsl:element name="sii:NIF"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

使用以上 XLS 的新输出:
        <?xml version = '1.0' encoding = 'UTF-8'?>
<siiLR:SuministroLRFacturasRecibidas xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.firstschema/ SLR.xsd">
<sii:Cabecera xmlns:sii="https://www.secondschema/sinfo.xsd">
<sii:Titular>
<sii:NombreRazon>LE NAME</sii:NombreRazon>
<sii:NIF>A0000000A</sii:NIF>
</sii:Titular>
</sii:Cabecera>
</siiLR:SuministroLRFacturasRecibidas>

命名空间 sii 链接出现在元素“Cabecera”中。它应该出现在根元素 SuministroLRFacturasRecibidas

Output with multiple sii element

最佳答案

<xsl:attribute name="xmlns:sii">正在添加 xmlns 命名空间,您真的打算这样做吗?

编辑:这不是必需的,因为在顶部声明的所有 namespace 前缀都是继承的。省略所有这些属性 xmlns:sii , xmlns:siiLR等等。

sii 命名空间由您创建的元素使用,例如 <xsl:element name="sii:Cabecera"> ,这就是它出现的原因。如果您不希望它创建没有命名空间的元素,例如
<xsl:element name="Cabecera">
并且不要将任何 sii: 命名空间前缀元素复制到您的输出中。

编辑 2 对于您显示的所需输出

为什么要排除 sii 命名空间?它在您的输出中使用,因此必须在那里...

我认为架构位置应该包含命名空间 URL 和架构 URL,如果相同,不知道是否应该将其合并为一个。

我还简化了几个可以简单地写为元素的 xsl:elements。

    <?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:siiLR="https:/www.firstschema/SLR.xsd"
xmlns:sii="https://www.secondschema/sinfo.xsd">

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

<xsl:template match="/">
<xsl:element name="siiLR:SuministroLRFacturasRecibidas">
<xsl:attribute name="xsi:schemaLocation"><xsl:text>https://www.secondschema/sinfo.xsd https://www.secondschema/sinfo.xsd</xsl:text></xsl:attribute>


<sii:Cabecera>
<sii:Titular>
<sii:NombreRazon> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </sii:NombreRazon>
<sii:NIF> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </sii:NIF>
</sii:Titular>
</sii:Cabecera>
</xsl:element>

关于xslt - "xmlns:xmlns"正在使用 XSLT 添加到 xml 输出文件中,并且 exclude-result-prefixes= "sii"没有从元素中排除命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com