Удаление элементов и / или атрибутов по имени по параметрам XSL

Следующее выполняет работу по удалению нежелательных элементов и атрибутов по имени (в данном примере «removeMe») из файла XML:

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

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

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

 <xsl:template match="removeMe"/>
</xsl:stylesheet>

Проблема заключается в том, что он не различает элементы и атрибуты, имя жестко запрограммировано и он может принимать только одно имя. Как это можно переписать, чтобы использовать пару входных параметров, как показано ниже, для удаления одного или нескольких конкретных элементов и / или атрибутов?

<xsl:param name="removeElementsNamed"/>
<xsl:param name="removeAttributesNamed"/>

Желаемый результат - возможность удалить один или более элементов и / или одного или нескольких атрибутов, при этом различая элементы и атрибуты (другими словами, должна быть возможность удалить все "t ime " элементы без , также удаляющие все атрибуты" time " ).

Хотя в этом раунде мне требовался XSLT 1.0, принятые решения XSLT 2.0 и другие ответы могут быть полезны другим.

13
задан abatishchev 9 March 2013 в 11:05
поделиться