Рассмотрите возможность использования таблицы стилей XSL с шаблоном, содержащим необходимые правила.Например:
strip-tag.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="node()[not(name()='tspan')]|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Этот шаблон сопоставляет все узлы и копирует их.Однако выражение XPath , определенное в атрибуте match
(то есть в части [not(name()='tspan')]
), исключает копирование любых узлов элемента tspan
и связанных с ними узлов атрибута, что эффективно удаляет их.Узлы дочерних элементов и / или текстовые узлы элемента tspan
будут скопированы, поэтому они будут оставаться в выходных данных по желанию.
source.xml
Рассмотрим следующий пример source.xml
file:
<?xml version="1.0"?>
<svg width="250" height="40" viewBox="0 0 250 40" xmlns="http://www.w3.org/2000/svg" version="1.1">
<text x="10" y="10">The <tspan x="10" y="10">quick</tspan> brown fox <tspan x="30" y="30">jumps</tspan> over the lazy dog</text>
<a href="https://www.example.com"><text x="100" y="100"><tspan x="50" y="50">click</tspan> me</text></a>
</svg>
Преобразование источника xml
Выполнение следующей команды xmlstarlet
(с указанием правильных путей для файлов) :
$ xml tr path/to/strip-tag.xsl path/to/source.xml
Или с помощью следующей команды xsltproc
(если она доступна в вашей системе):
$ xsltproc path/to/strip-tag.xsl path/to/source.xml
будетвыведите на консоль следующее:
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="40" viewBox="0 0 250 40" version="1.1">
<text x="10" y="10">The quick brown fox jumps over the lazy dog</text>
<a href="https://www.example.com"><text x="100" y="100">click me</text></a>
</svg>
Примечание: Все экземпляры открывающих и закрывающих тегов tspan
удалены.
Удаление нескольких
Чтобы удалить несколько различных именованных элементов, используйте оператор and
в выражении XPath, определенном в атрибуте match
.Например:
<!-- strip-multiple-tags.xsl-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="node()[not(name()='tspan') and not(name()='a')]|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Преобразование source.xml
с использованием этого шаблона приведет к следующему выводу:
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="40" viewBox="0 0 250 40" version="1.1">
<text x="10" y="10">The quick brown fox jumps over the lazy dog</text>
<text x="100" y="100">click me</text>
</svg>
Примечание: Всеэкземпляры тегов tspan
и a
удалены.