Учитывая коды в here и here, я изменил их, чтобы объяснить свой вопрос. Теперь код выглядит следующим образом:Условные в XML-файле с использованием xmlstarlet
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<Description>
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<stock>YES</stock>
</Description>
<Location>
<restock>UMG</restock>
<shelf>30</shelf>
</Location>
</book>
<book category="CHILDREN">
<Description>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<stock>NO</stock>
</Description>
<Location>
<restock>GIP</restock>
<shelf>20</shelf>
</Location>
</book>
<book category="CHILDREN">
<Description>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2015</year>
<stock>YES</stock>
</Description>
<Location>
<restock>GIP</restock>
<shelf>21</shelf>
</Location>
</book>
<book category="WEB">
<Description>
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<year>2003</year>
<stock>YES</stock>
</Description>
<Location>
<restock>NGT</restock>
<shelf>11</shelf>
</Location>
</book>
В моем личном вопросе, является то, что я хочу, чтобы первый, проверьте, если книга находится на складе, и если да, то проверьте полку, где он находится , Доступ к стоимости акций, если довольно прямой:
xmlstarlet sel -t -c "/bookstore/book/Description[stock='YES']" book.xml
Но я не могу выполнить условие. В руководстве XMLStarlet, он говорит, что я должен использовать -i или --Если, но я пытался сделать это следующим образом:
xmlstarlet sel -t -c -i "/bookstore/book/Description[stock='YES']" -v "/bookstore/book/Location/shelf" book.xml
Потому что я видел подобную проблему, но она сейчас работает. Есть идеи?
EDIT:
Используя следующий подход, я не получаю ошибки, но ничего на всех
cat book.xml | xmlstarlet sel -t -m "/bookstore/book/Description" -i "@stock='YES'" -v '/bookstore/book/Location/shelf'
EDIT 2:
Я думал о том, что произошло бы, если У меня две книги, называемые одинаковыми. Я редактировал код выше, и теперь я 2 книги под названием Гарри Поттер, каждый из них с различными датами публикации и полки
Следуя Daniel Хейли подход, я хочу знать всю книгу с названием Гарри Поттер:
xmlstarlet sel -t -v "/*/book[Description/title='Harry Potter']/Location/shelf"
Но я получаю только первый результат, но хочу всех.