XSL: Evite exportar definições de namespace para resultando documentos XML
-
21-08-2019 - |
Pergunta
Eu gostaria de levar os dados de alguns arquivos XML e transformá-los em um novo documento XML. No entanto, eu não quero que a definição de um espaço de nomes no XSLT para ocorrer no documento resultado.
Em outras palavras:
fonte:
<Namespace:Root xmlns:Namespace="http://www.something.com">
estilo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Namespace="http://www.something.com">
resultado:
<resultRoot xmlns:Namespace="http://www.something.com">
<!--I don't want the Namespace definition above-->
Eu estou usando msxsl para a transformação.
Solução
Você pode usar o atributo exclude-result-prefixes
do elemento xsl:stylesheet
para evitar a emissão de prefixos de namespace para o documento de saída:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:prefix1="http://www.something.com"
exclude-result-prefixes="prefix1">
</xsl:stylesheet>
Para suprimir vários espaços de nomes do documento de saída especificá-los separados por espaços:
exclude-result-prefixes="prefix1 prefix2 prefix3"
A partir da XSLT especificação :
Quando uma folha de estilo usa uma declaração de namespace para os fins de abordar a árvore fonte, especificando o prefixo no resultado-prefixos excluir-atributo irá evitar declarações de namespace supérfluos na árvore de resultado.
Outras dicas
A resposta de divo já foi escolhido e adequadamente-lo.
Mas se você estiver interessado em cavar mais fundo, confira os "Muitos namespaces" seção no meu magnum opus sobre o tema popular de "Namespaces em XSLT". (Sim, isso é pra ser tongue-in-cheek. :-))
uso de extensão-element-prefixos = "Namespace"
como:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:uw="xalan://ru.sbtc.util.XSLUtil"
extension-element-prefixes="exsl str datetime uw"
version="1.0">