我有一个xslt文件,它不会传递参数,我无法弄清楚原因。
我以前做过这个,但不确定我错过了什么。
我尝试设置一个全局变量,但似乎没有设置。
我尝试传递一个已设置的局部变量,但它没有通过。我想直接去我的" SALES/SUBJECT
"元素,但它会丢失变量,我记得这个问题,然后再使用内置Rules.xsl文件,所以我去了ELEMENT" SALES
"首先试图绕过它,但似乎仍然去那里。但我发现在此之前参数是空白的。
XML文件是:
<?xml version="1.0"?>
<REPORT VERSION="1.30" MAJORFORM="TomsForm">
<SALES>
<SUBJECT LATITUDE="32.2222" LONGITUDE="-118.222222">
<BUSINESS>Joes Bar and Grill</BUSINESS>
</SUBJECT>
</SALES>
</REPORT>
第一个尝试设置全局变量的XSLT文件不起作用。如果我停在&#34; majorForm&#34;设置并查看观察窗口,@MAJORFORM
显示为&#34; TomsForm&#34;,它应该。但是当我走到下一行时,它是空白的。因此,在我使用它的地方,它也是空白的。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="majorForm" select="@MAJORFORM"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="SALES/SUBJECT"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SALES/SUBJECT">
<xsl:for-each select ="@*">
<xsl:if test="name() = 'LATITUDE'">
<form>
<formName>
<xsl:value-of select="$majorForm"/>
</formName>
</form>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在另一个文件中,我将其设置为本地文件,并将$ majorForm设置为&#34; TomsForm&#34;,但是当我在apply-templates处传递它时,它从不传递任何内容。但是代码将它视为一个有效的参数,只是它没有任何内容。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:variable name="majorForm" select="@MAJORFORM"/>
<xsl:apply-templates select="SALES">
<xsl:with-param name="mainform" select="$majorForm"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="SALES">
<xsl:param name="mainForm"/>
<xsl:for-each select ="@*">
</xsl:for-each>
<xsl:apply-templates>
<xsl:with-param name="mainForm" select="$mainForm"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="SALES/SUBJECT">
<xsl:param name="mainForm"/>
<xsl:for-each select ="@*">
<xsl:if test="name() = 'LATITUDE'">
<form>
<formName>
<xsl:value-of select="$mainForm"/>
</formName>
</form>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我之前已经这样做了,它会正常工作。
我想找出为什么这些方法都不起作用。
答案 0 :(得分:1)
在第一个样式表中,变量majorForm
将为空,因为表达式的上下文是根节点(文档元素上方空间中不存在的节点),它没有{{1属性。
您需要将其更改为:
@MAJORFORM
在第二个示例中,匹配<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="majorForm" select="/*/@MAJORFORM"/>
上下文的模板是文档元素/*
,它具有属性REPORT
。
但是,您尝试指定参数@MAJORFORM
,但匹配mainform
的模板有一个名为SALES/SUBJECT
的参数(请注意字母“F”的大小写)。
将其更改为以下内容:
mainForm
您可以使用以下样式表实现相同的输出并简化操作:
<xsl:template match="/*">
<xsl:copy>
<xsl:variable name="majorForm" select="@MAJORFORM"/>
<xsl:apply-templates select="SALES">
<xsl:with-param name="mainForm" select="$majorForm"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>