Как удалить элемент из xml файла по аттрибуту? Symfony 4.1
Подскажите, как можно удалить тег video по аттрибуту height? Например: удалить всё содержимое тега video с аттрибутом height 720 Какие есть способы?
<?xml version="1.0" encoding="UTF-8"?>
<smil title="a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c">
<body>
<switch>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/360.mp4"
width="640"
height="360">
<param name="videoBitrate"
value="365000" valuetype="data">
</param>
<param name="audioBitrate"
value="96000" valuetype="data">
</param>
</video>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/480.mp4"
width="854"
height="480">
<param name="videoBitrate"
value="1600000" valuetype="data">
</param>
<param name="audioBitrate"
value="128000" valuetype="data">
</param>
</video>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/720.mp4"
width="1280"
height="720">
<param name="videoBitrate"
value="4500000" valuetype="data">
</param>
<param name="audioBitrate"
value="160000" valuetype="data">
</param>
</video>
</switch>
</body>
</smil>
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Решение на основе XSLT.
Использует так называемый шаблон Identity Transform.
Входной XML
<?xml version="1.0" encoding="UTF-8"?>
<smil title="a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c">
<body>
<switch>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/360.mp4" width="640" height="360">
<param name="videoBitrate" value="365000" valuetype="data">
</param>
<param name="audioBitrate" value="96000" valuetype="data">
</param>
</video>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/480.mp4" width="854" height="480">
<param name="videoBitrate" value="1600000" valuetype="data">
</param>
<param name="audioBitrate" value="128000" valuetype="data">
</param>
</video>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/720.mp4" width="1280" height="720">
<param name="videoBitrate" value="4500000" valuetype="data">
</param>
<param name="audioBitrate" value="160000" valuetype="data">
</param>
</video>
</switch>
</body>
</smil>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="video[@height='720']" />
</xsl:stylesheet>
Выходной XML
<?xml version='1.0' encoding='UTF-8' ?>
<smil title="a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c">
<body>
<switch>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/360.mp4" width="640" height="360">
<param name="videoBitrate" value="365000" valuetype="data"/>
<param name="audioBitrate" value="96000" valuetype="data"/>
</video>
<video src="mp4:a8e8b72798c3c7159f8d8f3af9676449e3b5dc12ac1dd782003a12fabd4ac65c/480.mp4" width="854" height="480">
<param name="videoBitrate" value="1600000" valuetype="data"/>
<param name="audioBitrate" value="128000" valuetype="data"/>
</video>
</switch>
</body>
</smil>