XSLT 如何在模板内的元素中添加命名空间前缀
XSLT How to add namespace prefix in elements inside template
我正在使用 xslt 将一个 XML 转换为另一个,我有所有标签的名称 space 前缀,例如 "ns9"。在某些地方,我调用一个模板来生成其中的元素,但我缺少 namespace 前缀。我尝试在模板中添加namespace,但没有反映。
<xsl:call-template name="split">
<xsl:with-param name="list" select="FlightReferences"/>
<xsl:with-param name="delimiter" select="' '"/>
<xsl:with-param name="tag" select="'PaxJourneyRefID'"/>
</xsl:call-template>
响应如下,标签 PaxJourneyRefID namespace prefix is missing.
<ns9:OriginDest>
<ns9:DestCode>DXB</ns9:DestCode>
<ns9:OriginCode>LHR</ns9:OriginCode>
<ns9:OriginDestID>LHRDXB</ns9:OriginDestID>
<PaxJourneyRefID>Flight1</PaxJourneyRefID>
</ns9:OriginDest>
尝试在模板声明中添加名称 space,
<xsl:template name="split">
<xsl:param name="list"/>
<xsl:param name="delimiter"/>
<xsl:param name="tag"/>
<xsl:choose>
<xsl:when test="contains($list, $delimiter)">
<xsl:element name="{$tag}" xmlns:ns9="http://www.example.com/IATA/2015/00/2018.2/Sample" >
<xsl:value-of select="substring-before($list,$delimiter)"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="list" select="substring-after($list,$delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
<xsl:with-param name="tag" select="$tag"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$list = ''">
<xsl:text/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{$tag}">
<xsl:value-of select="$list"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
您可以在 xsl:element name
中使用前缀,例如<xsl:element name="ns9:{$tag}">
.
我正在使用 xslt 将一个 XML 转换为另一个,我有所有标签的名称 space 前缀,例如 "ns9"。在某些地方,我调用一个模板来生成其中的元素,但我缺少 namespace 前缀。我尝试在模板中添加namespace,但没有反映。
<xsl:call-template name="split">
<xsl:with-param name="list" select="FlightReferences"/>
<xsl:with-param name="delimiter" select="' '"/>
<xsl:with-param name="tag" select="'PaxJourneyRefID'"/>
</xsl:call-template>
响应如下,标签 PaxJourneyRefID namespace prefix is missing.
<ns9:OriginDest>
<ns9:DestCode>DXB</ns9:DestCode>
<ns9:OriginCode>LHR</ns9:OriginCode>
<ns9:OriginDestID>LHRDXB</ns9:OriginDestID>
<PaxJourneyRefID>Flight1</PaxJourneyRefID>
</ns9:OriginDest>
尝试在模板声明中添加名称 space,
<xsl:template name="split">
<xsl:param name="list"/>
<xsl:param name="delimiter"/>
<xsl:param name="tag"/>
<xsl:choose>
<xsl:when test="contains($list, $delimiter)">
<xsl:element name="{$tag}" xmlns:ns9="http://www.example.com/IATA/2015/00/2018.2/Sample" >
<xsl:value-of select="substring-before($list,$delimiter)"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="list" select="substring-after($list,$delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
<xsl:with-param name="tag" select="$tag"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$list = ''">
<xsl:text/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{$tag}">
<xsl:value-of select="$list"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
您可以在 xsl:element name
中使用前缀,例如<xsl:element name="ns9:{$tag}">
.