2017-09-26 15 views
0

{ "Root": { "u_effective_date": "27.03.2017", "u_name": "Test", "u_preferred_name": "test", "u_title": "Dir ressources humaines", "u_department": "Ressources humaines" }}Comment faire pour supprimer le nœud racine du xml lors de la conversion à l'aide JSON xslt

à

sortie requis: { "u_effective_date": « 2017-03 -27 ", " u_name ":" Test ", " u_preferred_name ":" Test ", "u_title": "Dir ressources humaines", "u_department": "Ressources humaines" }

Voici le xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Root xmlns:xtt="urn:com.workday/xtt" 
xmlns:etv="urn:com.workday/etv" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:ws="urn:com.workday/workersync"> 
<u_effective_date>2017-03-27</u_effective_date> 
<u_name>Test</u_name> 
<u_preferred_name>Test</u_preferred_name> 
<u_title>Dir Human Resources</u_title> 
<u_department>Human Resources</u_department> 
</Root> 

est inférieure à la xslt j'utilise:

<?xml version="1.0"?> 

<xsl:template match="/">{ 
    <xsl:apply-templates select="*"/>} 
</xsl:template> 

<!-- Object or Element Property--> 
<xsl:template match="*"> 
    "<xsl:value-of select="name()"/>" : <xsl:call-template name="Properties"/> 
</xsl:template> 

<!-- Array Element --> 
<xsl:template match="*" mode="ArrayElement"> 
    <xsl:call-template name="Properties"/> 
</xsl:template> 

<!-- Object Properties --> 
<xsl:template name="Properties"> 
    <xsl:variable name="childName" select="name(*[1])"/> 
    <xsl:choose> 
     <xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when> 
     <xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when> 



     <xsl:otherwise>{ 

      <xsl:apply-templates select="@*"/> 
      <xsl:apply-templates select="*"/> 
      }</xsl:otherwise> 
    </xsl:choose> 
    <xsl:if test="following-sibling::*">,</xsl:if> 
</xsl:template> 

<!-- Attribute Property --> 
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>", 
</xsl:template> 

+0

XML XSLT transforme pas JSON. Utilisez n'importe quel langage généraliste (Java, PHP, Python, etc.) pour lire dans JSON et re-mapper les éléments du dictionnaire/liste. – Parfait

+0

Ci-dessous le xml je suis en train de convertir en format JSON < u_effective_date> 2017-03-27 test test Dir ressources humaines Ressources humaines

+0

Salut, merci pour Parfait votre réponse .. J'ai mis à jour la question avec le xml et xslt ... que dois-je éditer pour passer le nœud racine dans le xml et la sortie des nœuds enfants. –

Répondre

0

Il vous suffit de modifier la correspondance du modèle de niveau supérieur entre "/" et "/Root". C'est tout!

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" omit-xml-declaration="yes"/> 

<xsl:template match="/Root">{ 
    <xsl:apply-templates select="*"/> 
} 
</xsl:template> 

<!-- Object or Element Property--> 
<xsl:template match="*"> 
    "<xsl:value-of select="name()"/>" : <xsl:call-template name="Properties"/> 
</xsl:template> 

<!-- Array Element --> 
<xsl:template match="*" mode="ArrayElement"> 
    <xsl:call-template name="Properties"/> 
</xsl:template> 

<!-- Object Properties --> 
<xsl:template name="Properties"> 
    <xsl:variable name="childName" select="name(*[1])"/> 
    <xsl:choose> 
    <xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when> 
    <xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when> 

    <xsl:otherwise>{  
     <xsl:apply-templates select="@*"/> 
     <xsl:apply-templates select="*"/> 
     }</xsl:otherwise> 
    </xsl:choose> 
    <xsl:if test="following-sibling::*">,</xsl:if> 
</xsl:template> 

<!-- Attribute Property --> 
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>", 
</xsl:template> 

</xsl:stylesheet> 

Sortie

{ 

    "u_effective_date" : "2017-03-27", 
    "u_name" : "Test", 
    "u_preferred_name" : "Test", 
    "u_title" : "Dir Human Resources", 
    "u_department" : "Human Resources" 
} 
+0

Merci Parfait !! –

+0

Pas de problème! Heureux de vous aider. Ne pas oublier la façon particulière de dire [merci] (https://meta.stackexchange.com/a/5235) sur StackOverflow. – Parfait