Как удалить элемент из 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>
→ Ссылка