Фильтр XSLT узлов нескольких условий - PullRequest
0 голосов
/ 10 ноября 2019

Я ищу способ отфильтровать некоторые узлы в XML. В выводе я хотел бы оставить все узлы , если :

<year> это 2020

и

<year>2019 И <available> - ДА.

необработанный xml:

<root>
    <item>
        <code>1</code>
        <available>YES</available>
        <year>2020</year>
    </item>
    <item>
        <code>2</code>
        <available>NO</available>
        <year>2020</year>
    </item>
    <item>
        <code>3</code>
        <available>NO</available>
        <year>2019</year>
    </item>
    <item>
        <code>3</code>
        <available>YES</available>
        <year>2019</year>
    </item>
</root>

Результаты теста:

<root>
    <item>
        <code>1</code>
        <available>YES</available>
        <year>2020</year>
    </item>
    <item>
        <code>2</code>
        <available>NO</available>
        <year>2020</year>
    </item>
    <item>
        <code>3</code>
        <available>YES</available>
        <year>2019</year>
    </item>
</root>

Я могу отфильтровать узлы 2020, 2019 с:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="no" indent="yes" method="xml"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node() | @*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="item[not(YEAR = 2020) and not(YEAR = 2019)]" />

 </xsl:stylesheet>

Я просто не могу уточнить второе условие <year> is 2019 AND <available> is YES.

1 Ответ

2 голосов
/ 10 ноября 2019

A year не может быть 2020 И 2019. Я полагаю, вы имели в виду:

year это 2020
ИЛИ
year это 2019 И available is YES

Если сформулировать это следующим образом:

<xsl:template match="item[not(year=2020 or year=2019 and available='YES')]" />

даст запрошенный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...