La modification d'une valeur de nom d'espace dans une transformation XSL?

Je ne suis pas sûr si c'est possible, comme je suis très nouveau pour XSLT et d'autres choses, mais peut-être que certains d'entre vous pourraient m'aider ici? C'est un peu délicat et je n'ai rien trouvé de semblable sur internet:

Le problème est que j'ai un xml d'entrée avec espaces de noms déclarés et tous, et j'ai seulement besoin d'effectuer de légères modifications (ajout ou suppression d'attributs ou de les déplacer vers d'autres endroits). Mais en même temps, je dois mettre à jour les références d'espace de noms dans le document de la balise du document. Ainsi, par exemple, l'entrée xml pourrait ressembler à quelque chose comme ceci:

<order
  xmlns="some.url.01"
  xmlns:ns2="some.other.url"
  xmlns:ns3="another.one"
>
  <orderEntry>
    <orderControl>
      <mandant>test</mandant>
      <businessUnit>test</businessUnit>
      <inboundChannel>test</inboundChannel>
      <timestamp>timestamp</timestamp>
      <requestedDocuments>
        <ns2:document>orderForm</ns2:document>
      </requestedDocuments>
    </orderControl>
  </orderEntry>
</order>

le xml résultant devrait ressembler à ceci:

<order
  xmlns="some.url.02"
  xmlns:ns2="some.other.url.02"
  xmlns:ns3="another.one.02"
>
  <orderEntry>
    <orderControl>
      <mandant>test</mandant>
      <businessUnit>test</businessUnit>
      <inboundChannel>test</inboundChannel>
      <!-- deleted timestamp for example -->
      <requestedDocuments>
        <ns2:document>orderForm</ns2:document>
      </requestedDocuments>
    </orderControl>
  </orderEntry>
</order>

mais la seule chose que j'obtiens est:

<order
  xmlns="some.url.02"
>
  <orderEntry>
    <orderControl>
      <mandant>test</mandant>
      <businessUnit>test</businessUnit>
      <inboundChannel>test</inboundChannel>
      <!-- deleted timestamp for example -->
      <requestedDocuments>
        <ns2:document xmlns:ns2="some.other.url.02">orderForm</ns2:document>
      </requestedDocuments>
    </orderControl>
  </orderEntry>
</order>

Maintenant, peut-être pour l'une ou les deux de vous il ne pourrait pas être un gros problème, mais j'ai la restriction que le document de sortie devrait ressembler à un-à-un le même que le document d'entrée, sauf pour les demandes de modifications (changements de noms et de suppression).

Mon XSLT ressemble un comme ceci:

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="some.url.02"
  xmlns:ns2="some.other.url.02"
  xmlns:ns3="another.one.02"
>
  <xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes" indent="yes"/>

  <xsl:strip-space elements="*"/>

  <xsl:template match="*">
    <xsl:choose>
      <xsl:when test="name(.) != 'timestamp'">
        <xsl:element name="{node-name(.)}">
          <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="@*">
    <xsl:attribute name="{node-name(.)}">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

Quelqu'un peut-il aider s'il vous plaît? Les espaces de noms sont difficiles 🙁

P. S.: celui qui a édité mon entrée: Merci 🙂

InformationsquelleAutor Wickermoon | 2009-10-22