XSLT - 选择元素的子元素,其中 1 个子元素 = 'x',另一个子元素包含"y"



我试图选择一行的特定子元素,其中另一个子元素等于某个值,另一个子元素包含一个值。我的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元素不能以数字开始,解析器假设一个文字代替。参见@michael关于数字字面值为什么工作的解释

我在以下样式表中尝试了您的代码:

<?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

相关内容

最新更新