Pergunta

Eu tenho um documento XML com elementos namespaced-un, e eu quero usar XSLT para adicionar namespaces para eles. A maioria dos elementos estarão em namespace A; alguns vão estar em namespace B. Como posso fazer isso?

Foi útil?

Solução

Com foo.xml

<foo x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <a-special-element n="8"/>
</foo>

e foo.xsl

    <xsl:template match="*">
        <xsl:element name="{local-name()}" namespace="A" >
            <xsl:copy-of select="attribute::*"/>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="a-special-element">
        <B:a-special-element xmlns:B="B">
            <xsl:apply-templates match="children()"/>
        </B:a-special-element>
    </xsl:template>

</xsl:transform>

I get

<foo xmlns="A" x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <B:a-special-element xmlns:B="B"/>
</foo>

É isso que você está procurando?

Outras dicas

Você vai precisar de dois ingredientes principais para esta receita.

O estoque molho será a identidade transformar , eo sabor principal será dado pelo atributo namespace para xsl:element .

A seguir, o código não foi testado, deve adicionar o http://example.com/ namespace a todos os elementos.

<xsl:template match="*">
  <xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
</xsl:template>

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

Mensagem pessoal: Olá, Jeni Tennison. Eu sei que você está lendo isso.

Aqui está o que eu tenho até agora:

<xsl:template match="*">
    <xsl:element name="{local-name()}" namespace="A" >
        <xsl:apply-templates />
    </xsl:element>
</xsl:template>

<xsl:template match="a-special-element">
    <B:a-special-element xmlns:B="B">
      <xsl:apply-templates />
    </B:a-special-element>
</xsl:template>

Esta quase funciona; o problema é que ele não está copiando atributos. Pelo que tenho lido thusfar, xsl: elemento não tem uma maneira de copiar todos os atributos do elemento como está (não-atributo utilização conjuntos de não aparecer para cortá-la).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top