Как удалить элементы из xml, использующего xslt с таблицей стилей и xsltproc?

У меня есть много XML-файлов, которые имеют что-то вроде формы:

<Element fruit="apple" animal="cat" />

Который я хочу быть удаленным из файла.

Используя таблицу стилей XSLT и утилиту командной строки Linux xsltproc, как я мог сделать это?

Этой точкой в сценарии у меня уже есть список файлов, содержащих элемент, который я хочу удалить, таким образом, единственный файл может использоваться в качестве параметра.


Править: вопросу первоначально недоставало намерения.

То, чего я пытаюсь достигнуть, должно удалить весь элемент "Элемент" где (фрукты == животное "apple" && == "кошка"). В том же документе существует много элементов под названием "Элемент", я хочу для них остаться. Так

<Element fruit="orange" animal="dog" />
<Element fruit="apple"  animal="cat" />
<Element fruit="pear"   animal="wild three eyed mongoose of kentucky" />

Стал бы:

<Element fruit="orange" animal="dog" />
<Element fruit="pear"   animal="wild three eyed mongoose of kentucky" />
68
задан Dimitre Novatchev 30 June 2019 в 20:29
поделиться

1 ответ

Используя один из самых фундаментальных шаблонов разработки XSLT: "При переопределении преобразование идентификационных данных " каждый просто запишет следующее:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
         <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="Element[@fruit='apple' and @animal='cat']"/>
</xsl:stylesheet>

Делают примечание , как второй шаблон переопределяет идентификационные данные (1-й) шаблон только для элементов под названием "Элемент", которые имеют атрибут "фрукты" со значением "яблоко" и приписывают "животное" со значением "кошка". Этот шаблон имеет пустое тело, что означает, что подобранный элемент просто проигнорирован (ничто не производится, когда это подобрано).

, Когда это преобразование применяется на следующий исходный XML-документ:

<doc>... 
    <Element name="same">foo</Element>...
    <Element fruit="apple" animal="cat" />
    <Element fruit="pear" animal="cat" />
    <Element name="same">baz</Element>...
    <Element name="same">foobar</Element>...
</doc>

к требуемому результату приводят:

<doc>... 
    <Element name="same">foo</Element>...
    <Element fruit="pear" animal="cat"/>
    <Element name="same">baz</Element>...
    <Element name="same">foobar</Element>...
</doc>
[еще 119] фрагменты кода использования и переопределения шаблона идентификационных данных могут быть найдены здесь .

131
ответ дан Dimitre Novatchev 24 November 2019 в 14:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: