Pergunta

Eu estou tentando remover o xmlns="http://webdev2003.test.com" atributo da seguinte XML usando XSL / XSLT, uma exigência da tarefa XML no SSIS. O que é uma metodologia adequada considerando um tamanho de arquivo grande. ~ 40MB

<?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>
Foi útil?

Solução

Eu odeio quando eu responder às minhas próprias perguntas, mas o crédito vai para - http://blogs.msdn.com/kaevans/archive/2003/06/13/8679.aspx

A primeira parte do exemplo de listas como remover todos os atributos que nos meus trabalhos de cenário. Talvez haja uma solução melhor?

Outras dicas

Eu acho que você pode remover as declarações de namespace como descrito em este artigo . Parece que você pode ter que declarar um prefixo para o namespace em sua folha de estilo antes de adicionar o atributo excluem-resultado-prefixos.

Você pode impedir que isso aconteça com o xsl: o elemento de estilo excluir-resultado-prefixos atributo. O nome deste atributo pode ser confuso, porque os prefixos de namespace ainda vai aparecer na árvore de resultado. Isso não significa que "exclui os prefixos no resultado"; que significa "excluir os espaços de nomes com esses prefixos".

E

<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>

?

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