XSL-тест, если указанное значение не существует в цикле и покажет результат один раз - PullRequest
0 голосов
/ 16 апреля 2019

Я новичок в 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, которая показывает тег EXIST ~ YES только один раз, когда у меня есть Name = 'OPACITY' и Value ='BLACK':

<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">
                        &#x0A;EXIST~YES
                        </xsl:when>
                    </xsl:choose>
                </xsl:when>
                </xsl:choose>
            </xsl:if>
        </xsl:if>

</xsl:for-each>

Мне нужна ваша помощь, чтобы отобразить тег EXIST ~ NO в случае, если [Name = 'OPACITY' и Value = 'BLACK'] существует не во всех строках.на самом деле, когда я использую блок «иначе» внутри for-each, он показывает 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>

1 Ответ

0 голосов
/ 16 апреля 2019

Исходя из вашего XML, если вы хотите вывести «EXIST ~ YES», если был хотя бы один row с Name = 'OPACITY' и Value = 'BLACK', или «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

...