#xml #xpath #xquery
Вопрос:
<Tasks>
<Task>
<UID>14</UID>
<Name>Entertainment</Name>
<ID>2</ID>
<PerComp>22</PerComp>
</Task>
<Task>
<UID>12</UID>
<Name>Movie</Name>
<ID>1</ID>
<PerComp>55</PerComp>
</Task>
<Task>
<UID>15</UID>
<Name>Star</Name>
<ID>3</ID>
<PerComp>100</PerComp>
</Task>
</Tasks>
Можно ли перечислить все имена задач в разделителе через запятую из приведенного выше XML с условием PerComp, не равным 100? Там может быть 100 задач, и мне нужны все имена задач?
Ожидаемый результат:
Entertainment, Movie, etc.
Комментарии:
1. Вы добавили тег xquery, так почему же вы ограничиваете ответ xpath 1.0 в названии? Если вы можете использовать xpath 2.0 , я восстановлю свой ответ.
2. Инструмент, который я использую, поддерживает только xpath1.0. В качестве альтернативы я планирую импортировать xml в sql и попробовать сделать запрос. Поэтому я ищу возможный вариант либо xpath, либо xquery
Ответ №1:
XPath 1.0 позволяет извлекать набор узлов (которые являются элементами, а не атрибутами — ваш XML не содержит атрибутов), но он не позволяет объединять их значения в строку; это должно быть сделано вызывающим приложением.
//Task[not(PerComp = 100)]/Name
Комментарии:
1. //Задача[не(PerComp = ‘100’)]/Имя сработало для меня. Спасибо, Майкл.
2. Можно ли также получить оставшиеся узлы, если имя элемента соответствует определенному условию? В приведенном выше примере, если имя элемента совпадает с фильмом, я хочу, чтобы все узлы были ниже этого узла?
3. XPath возвращает ссылки на узлы в исходном документе. Если вы выберете узел, к нему по-прежнему будут подключены все его родительские, дочерние и дочерние узлы, поэтому они также доступны для вашего приложения. Вы можете либо перейти к этим узлам с помощью API, такого как DOM или JDOM, либо выполнить дополнительные выражения XPath, чтобы добраться до них.
4. <Задача> <Задача><UID>14<UID></UID> </UID><Имя>Развлечения<Имя></Имя> </Имя><ИДЕНТИФИКАТОР>2<ИДЕНТИФИКАТОР></ИДЕНТИФИКАТОР> </ИДЕНТИФИКАТОР><PerComp>22<PerComp></PerComp> </PerComp></Задача>. Как я могу отфильтровать только это значение по условию UID?? Скажем, как /Задачи/Задача[@UID=’14’]. Есть ли у нас такой вариант?
5. Пожалуйста, не задавайте дополнительных вопросов в комментариях к ответу. Задайте новый вопрос.