我的要求是转换到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输出文件。 xml文件中的元素有两个不同的名称空间前缀(siiLr和sii)。 exclude-result-prefixes =“sii”不排除sii:Cabecera
中的名称空间URIModiifed 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
中答案 0 :(得分:1)
{% if model.datefinish == datetime.today %}
<h5>It ends today</h5>
{% else %}
<h5>It does not end today</h5>
{% endif %}
正在添加xmlns命名空间,你真的打算这个??
编辑:这不是必需的,因为在顶部声明的所有名称空间前缀都会在任何地方继承。省略所有这些属性<xsl:attribute name="xmlns:sii">
,xmlns:sii
等。
sii命名空间由您创建的元素xmlns:siiLR
使用,这就是它出现的原因。如果您不希望它创建没有名称空间的元素,如
<xsl:element name="sii:Cabecera">
并且不要将任何sii:namespace-prefixed元素复制到输出中。
编辑2 以显示所需的输出
为什么要排除sii名称空间?它用在你的输出中,因此必须在那里......
我认为架构位置应该包含命名空间URL和架构URL,不知道是否应该将其折叠为一个,如果相同的话。
我还简化了几个可以简单编写为元素的xsl:元素。
<xsl:element name="Cabecera">
答案 1 :(得分:0)
为什么要使用siiLR:SuministroLRPagosRecibidas作为xsl:element ??? 而不是使用:
<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>
...
尝试以下方法:
xsi:schemaLocation =“https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd SuministroLR.xsd”&gt;
我认为这应该可以解决这个问题。让我知道。