XSL получить узел, который не сравнивать по ключу - PullRequest
0 голосов
/ 25 марта 2020

В этом примере у меня есть это xml

<CityStates>
<States>
    <State Abbr="AL">Alabama</State>
    <State Abbr="AK">Alaska</State>
    <State Abbr="AZ">Arizona</State>
    <State Abbr="AR">Arkansas</State>
</States>
<Cities>
    <City State="NY" >New York</City>
    <City State="CA" >Los Angeles</City>
    <City State="AZ" >Chicago</City>
    <City State="AR" >Houston</City>
    <City State="AR" >Philadelphia</City>   
  </Cities>
</CityStates>

Я хотел бы просмотреть только узлы, которые не имеют состояния с ключом () xsl это:

<xsl:key name="keyState" match="State" use="@Abbr"/>
<xsl:template match="/">
            <xsl:for-each select="//City">
                    <xsl:value-of select="City"/>
            </xsl:for-each>
</xsl:template>

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Попробуйте что-то вроде:

<xsl:template match="/CityStates">
    <xsl:for-each select="Cities/City[not(key('keyState', @State))]" >
        <xsl:value-of select="."/>
    </xsl:for-each>
</xsl:template>

Вы не опубликовали ожидаемый результат. Возможно, вы захотите добавить какой-нибудь разделитель после инструкции xsl:value-of.

0 голосов
/ 25 марта 2020

Используйте предикат City[not(key('keyState', @State))], т.е.

        <xsl:for-each select="//City[not(key('keyState', @State))]">
                <xsl:value-of select="."/>
        </xsl:for-each>
...