我猜一个原始参见@michael关于数字字面值为什么工作的解释
我试图选择一行的特定子元素,其中另一个子元素等于某个值,另一个子元素包含一个值。我的XML如下所示:
<row>
<field1>HEAD</field1>
<field2/>
<field3>123,456,789,000</field3>
<field4>hello</field4>
<field5/>
</row>
我的目标是得到<field1/> = HEAD
和<field3/> contains '789'
中<field4/>
的值。
到目前为止,我已经尝试了以下似乎不工作:
<xsl:variable name="myVar" select="789"/>
<xsl:value-of select="row[field1 = 'HEAD' and contains(field3, $myVar)]/field4"/>
有人能指出我在这里做错了什么吗?
查看您的变量设置-如果您想分配文字'789'
,它应该是select="'789'"
:
<xsl:template match="/">
<xsl:variable name="myVar" select="'789'" />
<xsl:value-of select="row[field1 = 'HEAD'
and contains(field3, $myVar)]/field4"/>
</xsl:template>
Edit: To Clarify
<xsl:variable name="myVar" select="z123" />
将指定元素z123
的值(即789
,如果文档看起来如下)
<row>
<z123>789</z123>
<field1>HEAD</field1>
与
<xsl:variable name="myVar" select="'z123'" />
赋值字面值z123
。
789
工作的原因是因为xml元素不能以数字开始,解析器假设一个文字代替。我在以下样式表中尝试了您的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:variable name="myVar" select="789"/>
<xsl:template match="/">
<xsl:value-of select="row[field1 = 'HEAD' and contains(field3, $myVar)]/field4"/>
</xsl:template>
</xsl:stylesheet>
它工作得很好,它输出hello