У меня есть следующий XML, где мне нужно отфильтровать <rule>
узел, у которого есть дочерний узел <match>
со значением атрибута, не содержащим .aspx
.
Исходный XML:
<?xml version="1.0" encoding="UTF-8"?>
<rewrite>
<rules>
<rule name="welcome2020" stopProcessing="true">
<match url="welcome2020"/>
<action type="Redirect" url="https://www.mywebsite.org/Pages/.welcome2020aspx" appendQueryString="false"/>
</rule>
<rule name="Page to Page Redirect">
<match url="/Staff/Pages/Ashley.aspx"/>
<action type="Rewrite" url="services/Staff/Pages/Ashley.aspx"/>
</rule>
<rule name="Page to Page Redirect">
<match url="ENT"/>
<action type="Rewrite" url="services/audiology/earnosethroat.aspx"/>
</rule>
</rules>
</rewrite>
После преобразования я хочу, чтобы XML был:
<?xml version="1.0" encoding="UTF-8"?>
<rewrite>
<rules>
<rule name="welcome2020" stopProcessing="true">
<match url="welcome2020"/>
<action type="Redirect" url="https://www.mywebsite.org/Pages/.welcome2020aspx" appendQueryString="false"/>
</rule>
<rule name="Page to Page Redirect">
<match url="ENT"/>
<action type="Rewrite" url="services/audiology/earnosethroat.aspx"/>
</rule>
</rules>
</rewrite>
Ниже представлен некоторый XSLT, который я придумал.Я в основном не могу придумать шаблон, который может выбрать родительский на основе сопоставленного дочернего узла.Это вообще возможно?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//rewrite/rules/rule/match[contains(@url,'aspx')]/parent::rule" />
</xsl:stylesheet>
Идея состоит в том, что XSLT в основном удаляет любой узел <rule>
, имеющий дочерний узел <match>
, а узел <match>
имеет атрибут URL, содержащий .aspx