我试图选择一行的特定子元素,其中另一个子元素等于某个值,另一个子元素包含一个值。我的XML如下所示:
<row>
<field1>HEAD</field1>
<field2/>
<field3>123,456,789,000</field3>
<field4>hello</field4>
<field5/>
</row>
我的目标是让<field4/>
的值<field1/> = HEAD
和<field3/> contains '789'
。
到目前为止,我已尝试过以下似乎不起作用的内容:
<xsl:variable name="myVar" select="789"/>
<xsl:value-of select="row[field1 = 'HEAD' and contains(field3, $myVar)]/field4"/>
有谁能发现我在这里做错了什么?提前谢谢。
答案 0 :(得分:1)
我在以下样式表中尝试了您的代码:
<?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
答案 1 :(得分:1)
查看您的变量设置 - 如果您要分配文字select="'789'"
,则应为'789'
:
<xsl:template match="/">
<xsl:variable name="myVar" select="'789'" />
<xsl:value-of select="row[field1 = 'HEAD'
and contains(field3, $myVar)]/field4"/>
</xsl:template>
修改:澄清
<xsl:variable name="myVar" select="z123" />
如果文档如下所示,将分配元素z123
的值(即789
)
<row>
<z123>789</z123>
<field1>HEAD</field1>
尽管
<xsl:variable name="myVar" select="'z123'" />
指定文字z123
。 我猜测原始请参阅@ michael关于数字文字为什么起作用的解释789
的工作原因是因为xml元素不能以数字开头而且解析器假定是字面值。