Соответствие шаблону XSLT 2.0 - убрать все атрибуты, которые не находятся в нужном пространстве имен - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть XML с разными атрибутами пространства имен - это в основном своего рода расширенный XHTML.Я хочу вывести все атрибуты пространства имен, отличные от xhtml.

Пример исходного XML:

<html>
  <body>
    <p class="test" xy:foo="true">blah</p>
  </body>
</html>

В настоящий момент у меня есть следующий шаблон XSLT:

<xsl:template match="@*">
    <xsl:choose>
        <xsl:when test='namespace-uri()="http://www.w3.org/1999/xhtml"'><xsl:copy-of select="."/></xsl:when>
        <xsl:otherwise></xsl:otherwise>
    </xsl:choose>
</xsl:template>

Желаемый выходной XML:

<html>
  <body>
    <p class="test">blah</p>
  </body>
</html>

Но, похоже, он не совпадает, потому что я получаю выходной XML полностью без атрибутов.У меня такое ощущение, что namespace-uri() работает не так, как ожидалось.Есть идеи?

1 Ответ

1 голос
/ 17 декабря 2011

Атрибуты в элементах XHTML (например, class one) являются атрибутами ни в пространстве имен, ни в пространстве имен XHTML. Так что используйте

<xsl:template match="@*[namespace-uri() != '']"/>

плюс шаблон преобразования личности.

...