我是xsl的新手,而且我无法获得想要的xml文件结果。这是查询结果的xml文件的一部分:
<?xml version="1.0" encoding="UTF-8"?>
-<SearchResults>
-<TableHeader>
<ColumnName>UCode</ColumnName>
<ColumnName>URev</ColumnName>
<ColumnName>Shapes</ColumnName>
<ColumnName>Name</ColumnName>
<ColumnName>Value</ColumnName>
</TableHeader>
-<Object>
<Attribute>XXXXXXX/Attribute>
<Attribute>A</Attribute>
<Attribute>BLABLA</Attribute>
<Attribute>PART_CODE</Attribute>
<Attribute>X123456</Attribute>
<Attribute/>
</Object>
-<Object>
<Attribute>YYYYYYYY/Attribute>
<Attribute>A</Attribute>
<Attribute>BLABLA</Attribute>
<Attribute>OPACITY</Attribute>
<Attribute>BLACK</Attribute>
<Attribute/>
</Object>
-<Object>
<Attribute>ZZZZZZZZ/Attribute>
<Attribute>A</Attribute>
<Attribute>BLABLA</Attribute>
<Attribute>PART_CODE</Attribute>
<Attribute>X198706</Attribute>
<Attribute/>
</Object>
-<Object>
<Attribute>XXXXXXX/Attribute>
<Attribute>A</Attribute>
<Attribute>BLABLA</Attribute>
<Attribute>OPACITY</Attribute>
<Attribute>BLACK</Attribute>
<Attribute/>
</Object>
</SearchResults>
这里是XSL上仅当我具有Name ='OPACITY'和Value ='BLACK'时才显示标签EXIST〜YES的部分:
<xsl:for-each select="/queryResult/result/child::row">
<xsl:variable name="attnamez" select='Name'/>
<xsl:if test="$attnamez='OPACITY'">
<xsl:variable name="attvaluez" select='Value'/>
<xsl:if test="$attvaluez!='NotDefined'">
<xsl:choose>
<xsl:when test="$attvaluez='BLACK'">
<xsl:choose>
<xsl:when test="count(preceding::row[Name='OPACITY' and Value=$attvaluez])=0">

EXIST~YES
</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:if>
</xsl:for-each>
如果[Name ='OPACITY'和Value ='BLACK']并非在所有行中都存在,我需要您的帮助来显示标签EXIST〜NO。实际上,当我在for-each内部使用“ otherwise”块时,它多次显示EXIST〜NO(每次值都不等于BLACK)。
非常感谢您的帮助,
这是生成的xml:
<queryResult>
<result>
<row idx="1">
<UCode>XXXXX</UCode>
<URev>B</URev>
<Name>OPACITY</Name>
<Value>WHITE</Value>
<SiteLegacy />
</row>
<row idx="2">
<UCode>YYYYYY</UCode>
<URev>B</URev>
<Name>OPACITY</Name>
<Value>BLACK</Value>
<SiteLegacy />
</row>
<row idx="3">
<UCode>YYYYYY</UCode>
<URev>B</URev>
<Name>OPACITY</Name>
<Value>BLACK</Value>
<SiteLegacy />
</row>
<row idx="4">
<UCode>YYYYYY</UCode>
<URev>B</URev>
<Name>OPACITY</Name>
<Value>BLACK</Value>
<SiteLegacy />
</row>
<row idx="5">
<UCode>YYYYYY</UCode>
<URev>B</URev>
<Name>OPACITY</Name>
<Value>BLACK</Value>
<SiteLegacy />
</row>
</result>
</queryResult>
答案 0 :(得分:0)
如果您要输出至少有一个row
且名称='OPACITY'和Value ='BLACK'的XML,如果您想输出“ EXIST〜YES”,否则使用“ EXIST〜NO”,你可以简单地做到这一点...
<xsl:choose>
<xsl:when test="queryResult/result/row[Name='OPACITY' and Value='BLACdK']">EXIST~YES</xsl:when>
<xsl:otherwise>EXIST~NO</xsl:otherwise>
</xsl:choose>
完全不需要xsl:for-each
。
在http://xsltfiddle.liberty-development.net/bnnZWk/1上查看它的运行情况