Как я могу получить все не исключенные элементы в этом списке, используя XPATH? - PullRequest
1 голос
/ 03 февраля 2011

У меня есть следующий XML-файл:

<items>
    <item>
        <name>Suede Shoe</name>
        <category>Footwear</category>
        <price>£90.00</price>
        <tags>
            <footwear />
            <shoes />
        </tags>
    </item>
    <item>
        <name>Leather Shoe</name>
        <category>footwear</category>
        <price>£90.00</price>
        <tags>
            <footwear />
        </tags>
    </item>
    <item>
        <name>Canvas Shoe</name>
        <category>Footwear</category>
        <price>£90.00</price>
        <tags>
            <footwear exclude="true"/>
            <shoes/>
        </tags>
    </item>
    <item>
        <name>Toecap Shoe</name>
        <category>Footwear</category>
        <price>£90.00</price>
        <tags>
            <footwear exclude="true"/>
        </tags>
    </item>
</items>

Я хотел бы выбрать все элементы, которые содержат один из выбранных мной тегов, но не вернуть результат, если тег исключен.

Примеры:

теги: обувь
возвращает: 1, 2

теги: обувь
возвращает 1, 3

теги: обувь | обувь
возвращает 1,2,3

Любая помощь, пожалуйста?

Перед включением требования исключить этот xpath работал:

//tags[implode('|', $tags)]/parent::item

тег "обувь", который не исключен.

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

для обуви | обувь, на которую XPath может выглядеть

//tags[footwear[not( @exclude='true' )]|shoes[not( @exclude='true' )]]/parent::item

Это покажет 1,2,3

0 голосов
/ 04 февраля 2011

Это выражение XPath 1.0:

/items/item[
   tags/*[
      not(@exclude='true')
   ][
      contains(
         concat('|',$tags,'|'),
         concat('|',name(),'|')
      )
   ]
]

С переменной $ tags, установленной как 'footwear' строка выбирает:

<item>
    <name>Suede Shoe</name>
    <category>Footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear />
        <shoes />
    </tags>
</item>
<item>
    <name>Leather Shoe</name>
    <category>footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear />
    </tags>
</item>

С переменной $ tags, установленной как 'shoes' строка выбирает:

<item>
    <name>Suede Shoe</name>
    <category>Footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear />
        <shoes />
    </tags>
</item>
<item>
    <name>Canvas Shoe</name>
    <category>Footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear exclude="true" />
        <shoes />
    </tags>
</item>

С переменной $ tags, установленной как 'footwear|shoes' строка выбирает:

<item>
    <name>Suede Shoe</name>
    <category>Footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear />
        <shoes />
    </tags>
</item>
<item>
    <name>Leather Shoe</name>
    <category>footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear />
    </tags>
</item>
<item>
    <name>Canvas Shoe</name>
    <category>Footwear</category>
    <price>£90.00</price>
    <tags>
        <footwear exclude="true" />
        <shoes />
    </tags>
</item>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...