пространство имен атрибута xsl - PullRequest
2 голосов
/ 31 мая 2011

У меня есть следующий xml

<?xml version="1.0" encoding="UTF-8"?>
<content>
  <artwork classification="12" href="1.jpg"/>
  <artwork classification="10" href="2.jpg"/>
</content>

При применении xsl

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                >

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

  <xsl:template match="@href">
    <xsl:attribute name="xlink:href">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>

он производит

<?xml version="1.0" encoding="UTF-8"?>
<content>
  <artwork classification="12" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="1.jpg"/>
  <artwork classification="10" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="2.jpg"/>
</content>

, тогда как мне нужно

<?xml version="1.0" encoding="UTF-8"?>
<content xmlns:xlink="http://www.w3.org/1999/xlink">
  <artwork classification="12"  xlink:href="1.jpg"/>
  <artwork classification="10"  xlink:href="2.jpg"/>
</content>

Как мне изменить xsl, чтобы получить нужный мне результат?

Я использую XSLT-процессор xalan.

1 Ответ

4 голосов
/ 31 мая 2011

Вам нужно просто сопоставить элементы, для которых вы хотите объявить пространство имен. Процессор применит для вас пространство имен.


XSLT 1.0 протестировано под MSXSL 4.0 (а также протестировано как XSLT 2.0 под Saxon-HE 9.2.1.1J )

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

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

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

    <xsl:template match="@href">
        <xsl:attribute name="xlink:href">
            <xsl:value-of select="."/>
        </xsl:attribute>
    </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...