2009-10-28 8 views
5

J'essaie de supprimer l'attribut xmlns="http://webdev2003.test.com" du fichier xml suivant en utilisant xsl/xslt, une exigence de la tâche XML dans SSIS. Quelle est la bonne méthodologie compte tenu d'une grande taille de fichier. ~ 40MoAttribut Rmove xmlns

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
<Account> 
    <FirstName xmlns="http://webdev2003.test.com/">John</FirstName> 
    <LastName xmlns="http://webdev2003.test.com/">Smith</LastName> 
</Account> 
</ArrayOfAccount> 
+0

Existe-t-il un espace de noms propre dans SSIS? – Tomalak

Répondre

0

Qu'en est-

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsl:template match="*"> 
    <xsl:element name="{name()}"> 
     <xsl:apply-templates select="attribute::*"/> 
     <xsl:if test="namespace-uri()!='http://webdev2003.test.com/' and 
       namespace-uri()!=''"> 
     <xsl:attribute name="xmlns"> 
      <xsl:value-of select="namespace-uri()"/> 
     </xsl:attribute> 
     </xsl:if> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

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

?

+0

Je reçois une erreur de XML Notepad - Un attribut avec un nom local 'xmlns' et un URI d'espace de noms nul ne peut pas être créé. Respectivement dans l'erreur MSVS: Un attribut avec un nom local 'xmlns' et un URI d'espace de noms nul ne peut pas être créé. – decompiled

1

Je pense que vous pouvez supprimer les déclarations d'espace de noms comme décrit dans this article. Il semble que vous deviez déclarer un préfixe pour l'espace de noms dans votre feuille de style avant de l'ajouter à l'attribut exclude-result-prefixes.

You can prevent this from happening with the xsl:stylesheet element's exclude-result-prefixes attribute. This attribute's name can be confusing, because the namespace prefixes will still show up in the result tree. It doesn't mean "exclude the prefixes in the result"; it means "exclude the namespaces with these prefixes".