为每个变量节点集使用应用模板 XLST 1.0
Use apply-template for each variable node-set XLST 1.0
我有这个 输入:
<?xml version="1.0" encoding="utf-8"?>
<Native xmlns="http://www.cargowise.com/Schemas/Native/2011/11" version="2.0">
<Header>
<OwnerCode>VISSHIMEL</OwnerCode>
</Header>
</Native>
我的 xslt 中有一个已声明的节点集:
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
我试图为每个节点集和 select OwnerCode 值“VISSHIMEL”做一个,但由于某种原因,我的模板调用没有获得值。 预期输出为:
<TariffCollection>
Yellow
<test>VISSHIMEL</test>
</TariffCollection>
<TariffCollection>
Red
<test>VISSHIMEL</test>
</TariffCollection>
<TariffCollection>
Green
<test>VISSHIMEL</test>
</TariffCollection>**
但是,<test>
始终为空。这是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 s1 exsl" version="1.0" xmlns:s0="http://www.cargowise.com/Schemas/Native/2011/11" xmlns:s1="http://www.cargowise.com/Schemas/Universal/2011/11" xmlns:exsl="http://exslt.org/common" >
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
<xsl:template match="/">
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
<xsl:call-template name="Test">
<xsl:with-param name="SupplierSCAC" select="."/>
</xsl:call-template>
<!-- <xsl:apply-templates select="/s0:Native" > -->
<!-- <xsl:with-param name="SupplierSCAC" select="."/> -->
<!-- </xsl:apply-templates> -->
</xsl:for-each>
</xsl:template>
<xsl:template name="Test" match="/s0:Native">
<xsl:param name="SupplierSCAC"/>
<TariffCollection>
<xsl:value-of select="$SupplierSCAC"/>
<test>
<xsl:value-of select="s0:Header/s0:OwnerCode"/>
</test>
</TariffCollection>
</xsl:template>
</xsl:stylesheet>
我知道for-each 并且参数成功显示在输出中,但我不知道为什么我无法访问xpath OwnerCode 的值。我尝试改用 apply-template 但更糟,因为我根本没有输出。如果您需要更多信息,请与我们联系。谢谢!
当模板被 xsl:call-template
指令调用时,match
属性将被忽略。因此,您仍处于由以下内容建立的上下文中:
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
和您的指示
<xsl:value-of select="s0:Header/s0:OwnerCode"/>
不选择任何内容,因为这些节点在另一个文档中。
试试这样的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s0="http://www.cargowise.com/Schemas/Native/2011/11"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="s0 exsl" >
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
<xsl:template match="/">
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
<xsl:variable name="root" select="/s0:Native" />
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
<TariffCollection>
<xsl:value-of select="."/>
<test>
<xsl:value-of select="$root/s0:Header/s0:OwnerCode"/>
</test>
</TariffCollection>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请注意,结果是 XML 片段,没有单个根元素。
我有这个 输入:
<?xml version="1.0" encoding="utf-8"?>
<Native xmlns="http://www.cargowise.com/Schemas/Native/2011/11" version="2.0">
<Header>
<OwnerCode>VISSHIMEL</OwnerCode>
</Header>
</Native>
我的 xslt 中有一个已声明的节点集:
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
我试图为每个节点集和 select OwnerCode 值“VISSHIMEL”做一个,但由于某种原因,我的模板调用没有获得值。 预期输出为:
<TariffCollection>
Yellow
<test>VISSHIMEL</test>
</TariffCollection>
<TariffCollection>
Red
<test>VISSHIMEL</test>
</TariffCollection>
<TariffCollection>
Green
<test>VISSHIMEL</test>
</TariffCollection>**
但是,<test>
始终为空。这是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 s1 exsl" version="1.0" xmlns:s0="http://www.cargowise.com/Schemas/Native/2011/11" xmlns:s1="http://www.cargowise.com/Schemas/Universal/2011/11" xmlns:exsl="http://exslt.org/common" >
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
<xsl:template match="/">
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
<xsl:call-template name="Test">
<xsl:with-param name="SupplierSCAC" select="."/>
</xsl:call-template>
<!-- <xsl:apply-templates select="/s0:Native" > -->
<!-- <xsl:with-param name="SupplierSCAC" select="."/> -->
<!-- </xsl:apply-templates> -->
</xsl:for-each>
</xsl:template>
<xsl:template name="Test" match="/s0:Native">
<xsl:param name="SupplierSCAC"/>
<TariffCollection>
<xsl:value-of select="$SupplierSCAC"/>
<test>
<xsl:value-of select="s0:Header/s0:OwnerCode"/>
</test>
</TariffCollection>
</xsl:template>
</xsl:stylesheet>
我知道for-each 并且参数成功显示在输出中,但我不知道为什么我无法访问xpath OwnerCode 的值。我尝试改用 apply-template 但更糟,因为我根本没有输出。如果您需要更多信息,请与我们联系。谢谢!
当模板被 xsl:call-template
指令调用时,match
属性将被忽略。因此,您仍处于由以下内容建立的上下文中:
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
和您的指示
<xsl:value-of select="s0:Header/s0:OwnerCode"/>
不选择任何内容,因为这些节点在另一个文档中。
试试这样的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s0="http://www.cargowise.com/Schemas/Native/2011/11"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="s0 exsl" >
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0"/>
<xsl:template match="/">
<xsl:variable name="SupplierSCAC">
<m>Yellow</m>
<m>Red</m>
<m>Green</m>
</xsl:variable>
<xsl:variable name="root" select="/s0:Native" />
<xsl:for-each select="exsl:node-set($SupplierSCAC)/m">
<TariffCollection>
<xsl:value-of select="."/>
<test>
<xsl:value-of select="$root/s0:Header/s0:OwnerCode"/>
</test>
</TariffCollection>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请注意,结果是 XML 片段,没有单个根元素。