2016-09-13 1 views
0

EntréeXSLT pour supprimer quelques noeuds et obtenir un noeud donné avec son enfant noeuds

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body><jsonObject> 
<User> 
<No>123</No> 
<Id>1</Id> 
<MailCode>43</MailCode> 
<Number>998</Number> 
</User> 
</jsonObject></soapenv:Body> 
</soapenv:Envelope> 

de sortie prévue

<User xmlns="http://sample.org"> 
<No>123</No> 
<Id>1</Id> 
<MailCode>43</MailCode> 
<Number>998</Number> 
</User> 

XSLT actuelle

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns="http://sample.org"> 


<xsl:template match="jsonObject"> 
</xsl:template> 

<xsl:template match="User"> 
     <!--Define the namespace --> 
     <xsl:element name="{local-name()}" namespace="http://sample.org"> 
      <!--apply to above selected node--> 
      <xsl:apply-templates select="node()|@*"> 

     </xsl:apply-templates></xsl:element> 
    </xsl:template> 


</xsl:stylesheet> 

Mais la sortie actuelle est,

<User xmlns="http://sample.org"> 
123 
1 
43 
998 
</User> 

Qu'est-ce que je fais mal ici? Aussi est-il un moyen d'extraire directement le contenu du nœud <User> au lieu d'écrire des modèles distincts pour supprimer des nœuds comme <jsonObject>?

+0

La sortie que vous prétendez n'est pas la sortie obtenue en exécutant le code que vous avez posté. - Notez que le fichier XML que vous avez publié n'a pas d'éléments 'JsonObject' ou' Request' - donc votre feuille de style ne fait rien sauf appliquer les règles du modèle intégré. –

+0

Désolé, c'était une faute de frappe. J'ai maintenant ajouté le XSLT correct maintenant. Basiquement pour la sortie j'ai seulement besoin du noeud et de ses éléments enfants avec le nouvel espace de nom appliqué. – user2894296

+0

Votre nouveau XSLT ne produit pas non plus la sortie revendiquée. –

Répondre

1

Le résultat attendu peut être réalisée en appliquant la feuille de style suivante:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="User | User/*" > 
    <xsl:element name="{local-name()}" namespace="http://sample.org"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet>