Xml 使用参数时,select的xsl值返回空
我试图使用xsltproc和stringparam从一些xml文件中获取数据,但无法使其正常工作。这有点冗长,但我已经给出了一些我尝试过的例子 假设我有两个XML文件x.XML和y.XML,它们之间唯一的模式差异是根标记。 像这样:Xml 使用参数时,select的xsl值返回空,xml,xslt,Xml,Xslt,我试图使用xsltproc和stringparam从一些xml文件中获取数据,但无法使其正常工作。这有点冗长,但我已经给出了一些我尝试过的例子 假设我有两个XML文件x.XML和y.XML,它们之间唯一的模式差异是根标记。 像这样: <?xml version="1.0" ?> <x> <C>ABC</C> <D>DEF</D> </x> <?xml version="1.0"?> <
<?xml version="1.0" ?>
<x>
<C>ABC</C>
<D>DEF</D>
</x>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:output method="text" />
<xsl:text>(</xsl:text>
<xsl:value-of select="x/C" />
<xsl:text>),(</xsl:text>
<xsl:value-of select="x/D"/>
<xsl:text>)
</xsl:text>
</xsl:template>
</xsl:stylesheet>
基础知识
DEF
及
XYZ
紫外线
现在我编写了两个xsl文件z1.xsl和z2.xsl来处理XML
像这样:
<?xml version="1.0" ?>
<x>
<C>ABC</C>
<D>DEF</D>
</x>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:output method="text" />
<xsl:text>(</xsl:text>
<xsl:value-of select="x/C" />
<xsl:text>),(</xsl:text>
<xsl:value-of select="x/D"/>
<xsl:text>)
</xsl:text>
</xsl:template>
</xsl:stylesheet>
(
),(
)
;
z1.xsl和z2.xsl之间的唯一区别是,在select中,“x/C”替换为“y/C”,而“x/D”替换为“y/D”
现在我运行:
$xsltproc z1.xsl x.xml
(ABC),(DEF)
及
$xsltproc z2.xsl y.xml
(XYZ),(UVW)
这就是我想要的。到目前为止,一切顺利
现在我修改了xsl文件,让我们将其命名为z3.xsl以添加一个参数
我补充说
并将“选择行”修改为:
<xsl:value-of select="concat($xOrY,'/C')"/>
<xsl:value-of select="concat($xOrY,'/D')"/>
现在当我跑的时候
$xsltproc--stringparam xOrY x z3.xsl x.xml
(x/C)、(x/D)
这当然不是我想要的。我做了一些搜索,发现我的选择应该是这样的:
<xsl:value-of select="*[name()=concat($xOrY,'/C')]" />
<xsl:value-of select="*[name()=concat($xOrY,'/D')]" />
但这就产生了这种输出
(),()
我还尝试使用local-name()而不是name(),并尝试在select中的“*”前面添加“/”,但仍然得到相同的结果。尝试使用此选项:
<xsl:value-of select="*[name()=$xOrY]/C" />
您的concat不起作用,因为concat的结果将是字符串
x/C
,因此谓词中的比较(在方括号内)将是name()='x/C'
,这是false。请尝试使用此选项:
<xsl:value-of select="*[name()=$xOrY]/C" />
您的concat不起作用,因为concat的结果将是字符串
x/C
,因此谓词中的比较(在方括号内)将是name()='x/C'
,这是错误的。可能尝试
好吧。就这么简单。谢谢你,丹尼尔。知道concat为什么不起作用吗?concat的结果是字符串x/C
,因此谓词中的比较(在方括号内)是name()='x/C'
,这是false。我会加上它作为答案。也许试试
好吧,呜咽。就这么简单。谢谢你,丹尼尔。知道concat为什么不起作用吗?concat的结果是字符串x/C
,因此谓词中的比较(在方括号内)是name()='x/C'
,这是false。我会加上它作为答案。