Как отфильтровать элементы определенного типа, которые не имеют атрибута с магическим значением и сохраняют остальную часть документа? Все это с использованием xmlstarlet
?xmlstarlet: фильтровать элемент с атрибутом
То, что я должен на сегодняшний день это:
cat <<EOF> database.xml
<?xml version="1.0"?>
<database>
<some name="A" />
<some name="B" />
<some name="C" />
<text>this is some text to be applied...</text>
<project>
<test deeper="structure"/>
</project>
</database>
EOF
и
xmlstarlet sel -t -m "*" -c "*[not(self::some[@name != 'A'])]" database.xml
дает
<some name="A"/><text>this is some text to be applied...</text><project>
<test deeper="structure"/>
</project>
Но это скрывает мой драгоценный <database>
tag
. Кроме того, отступ, что не является проблемой ... И не работает, когда <some>
не являются прямым потомком <database>
, например, дети <project>
.
То, что я хочу, чтобы это база данных, как это, но все <some>
удалены кроме один названный A
:
<database>
<some name="A" />
<text>this is some text to be applied...</text>
<project>
<test deeper="structure"/>
</project>
</database>
Приветствия
, что именно вы хотите, чтобы вернуться? это не ясно из вопроса. –
xpath like * // database/* "может работать. Подробности сообщения для' не является прямым потомком ... ' –
SIslam