У меня есть следующий входной XML-файл:выражения XPath для получения узла на основе значения атрибута
<rootnode>
<section id="1" status="fail">
<outer status="fail">
<inner status="fail"/>
<inner status="pass"/>
</outer>
<outer status="pass">
<inner status="pass"/>
</outer>
<outer status="pass"/>
<outer status="fail"/>
</section>
<section id="2" status="fail">
<outer status="fail">
<inner status="pass"/>
<inner status="fail"/>
<inner status="inc"/>
</outer>
</section>
</rootnode>
Я хочу, чтобы отфильтровать все не обанкротиться узлами состояния, так что результат выглядит следующим образом:
<rootnode>
<section id="1" status="fail">
<outer status="fail">
<inner status="fail"/>
</outer>
<outer status="fail"/>
</section>
<section id="2" status="fail">
<outer status="fail">
<inner status="fail"/>
</outer>
</section>
</rootnode>
<rootnode>
не обязательно должен быть включен в результат. Я попытался использовать xmllint
с выражением xpath. Я могу извлечь определенные узлы с
xmllint --xpath "//inner" input.xml
xmllint --xpath "//@status" input.xml
но только либо вернуть узлы без учета стоимости status
или возвращать только атрибут без окружающих узлов.
Есть ли способ сделать это с помощью выражения xpath? Если нет, то простое решение, которое включает в себя другие инструменты bash, тоже.
Вам нужен не XPATH XSLT, вы знаете, что, когда XPath возвращает узел со статусом = «сбой», который имеет внутренний элемент, как внутренний статус = «пройди», ты тоже получишь это. – SomeDude