本文介绍了XML 到 JSONX 需要通用 xslt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
使用 xslt 将 xml 转换为 jsonx

任何人都可以帮助我使用数组获取以下内容..我必须生成通用的 xsl..输入 XML:

Can anyone help me out in getting the below with an array..I have to generate the generalised xsl..Input XML:

<accounts>
    <displayOrdinal>0</displayOrdinal>
    <name>String</name>
    <account>
        <accountNumber>String</accountNumber>
        <name>String</name>
        <balance>
            <balanceAmount>0.0</balanceAmount>
        </balance>
        <balance>
            <balanceAmount>0.0</balanceAmount>
        </balance>
        <properties>
            <displayOrdinal>0</displayOrdinal>
        </properties>
        <properties>
            <displayOrdinal>0</displayOrdinal>
        </properties>
        <usage>
            <type>String</type>
        </usage>
        <usage>
            <type>String</type>
        </usage>
    </account>
    <account>
        <accountNumber>String</accountNumber>
        <name>String</name>
        <balance>
            <balanceAmount>0.0</balanceAmount>
        </balance>
        <balance>
            <balanceAmount>0.0</balanceAmount>
        </balance>
        <properties>
            <displayOrdinal>0</displayOrdinal>
        </properties>
        <properties>
            <displayOrdinal>0</displayOrdinal>
        </properties>
        <usage>
            <type>String</type>
        </usage>
        <usage>
            <type>String</type>
        </usage>
    </account>
</accounts>

输出:

<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
    <json:object name="accounts">
        <json:string name="displayOrdinal">0</json:string>
        <json:string name="name">String</json:string>
        <json:array name="account">
            <json:object>
                <json:string name="accountNumber">String</json:string>
                <json:string name="name">String</json:string>
                <json:array name="balance">
                    <json:object>
                        <json:string name="balanceAmount">0.0</json:string>
                    </json:object>
                    <json:object>
                        <json:string name="balanceAmount">0.0</json:string>
                    </json:object>
                </json:array>
                <json:array name="properties">
                    <json:object>
                        <json:string name="displayOrdinal">0</json:string>
                    </json:object>
                    <json:object>
                        <json:string name="displayOrdinal">0</json:string>
                    </json:object>
                </json:array>
                <json:array name="usage">
                    <json:object>
                        <json:string name="type">String</json:string>
                    </json:object>
                    <json:object name="usage">
                        <json:string name="type">String</json:string>
                    </json:object>
                </json:array>
            </json:object>
            <json:object>
                <json:string name="accountNumber">String</json:string>
                <json:string name="name">String</json:string>
                <json:object name="balance">
                    <json:string name="balanceAmount">0.0</json:string>
                </json:object>
                <json:array name="balance">
                    <json:object>
                        <json:string name="balanceAmount">0.0</json:string>
                    </json:object>
                    <json:object>
                        <json:string name="displayOrdinal">0</json:string>
                    </json:object>
                    <json:object>
                        <json:string name="displayOrdinal">0</json:string>
                    </json:object>
                </json:array>
                <json:array name="usage">
                    <json:object>
                        <json:string name="type">String</json:string>
                    </json:object>
                    <json:object>
                        <json:string name="type">String</json:string>
                    </json:object>
                </json:array>
            </json:object>
        </json:array>
    </json:object>
</json:object>

我正在使用下面的 xslt 和输出,但与上面预期的不同.有人可以帮助我.

I am using the below xslt and output but not as expected above.Could any one please help me.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
        <xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
        <xsl:strip-space elements="*"/>
        <!-- Array -->
        <xsl:template match="*[*[2]][name(*[1])=name(*[2])]">
            <json:object name="{name()}">
                <json:array name="{name(*[1])}">
                    <xsl:apply-templates/>
                </json:array>
            </json:object>
        </xsl:template>
        <!-- Array member -->
        <xsl:template match="*[parent::*[ name(*[1])=name(*[2]) ]] | /">
            <json:object>
                <xsl:apply-templates/>
            </json:object>
        </xsl:template>
        <!-- Object -->
        <xsl:template match="*">
            <json:object name="{name()}">
                <xsl:apply-templates/>
            </json:object>
        </xsl:template>
        <!-- String -->
        <xsl:template match="*[not(*)]">
            <json:string name="{name()}">
                <xsl:value-of select="."/>
            </json:string>
        </xsl:template>
    </xsl:stylesheet>

推荐答案

也许你的意思是说 Groups 应该是一个数组,而 Group 应该是一个对象,而不是相反?

May be you meant to say that Groups should be an array and Group should be an object instead of the other way around?

试试这个...

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
  exclude-result-prefixes="xsl xs">
<xsl:output indent="yes" encoding="UTF-8" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" /> 

<xsl:template match="/">
  <json:object>
     <xsl:apply-templates />    
  </json:object>
</xsl:template>

<!-- Array -->
<xsl:template match="*[*[2]][name(*[1])=name(*[2])]">
  <json:array name="{name()}">
    <xsl:apply-templates />
  </json:array>
</xsl:template>

<!-- Object -->  
<xsl:template match="*">
  <json:object name="{name()}">
    <xsl:apply-templates />
  </json:object>
</xsl:template>

<!-- String -->
<xsl:template match="*[not(*)]">
  <json:string name="{name()}">
    <xsl:value-of select="." />
  </json:string>
</xsl:template>
</xsl:stylesheet>

...输出是这个...

<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
   <json:object name="Login">
      <json:array name="Groups">
         <json:object name="Group">
            <json:string name="Name">john</json:string>
            <json:string name="Password"/>
         </json:object>
         <json:object name="Group">
            <json:string name="Name">john</json:string>
            <json:string name="Password"/>
         </json:object>
      </json:array>
   </json:object>
</json:object>

更新

为了响应 OP 的更新要求,这里有一个新的解决方案.


Update

In response to the OP's updated requirements, here is a new solution.

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
<xsl:output indent="yes" encoding="UTF-8" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" /> 

<!-- Array -->
<xsl:template match="*[*[2]][name(*[1])=name(*[2])]">
  <json:object name="{name()}">
    <json:array name="{name(*[1])}">
      <xsl:apply-templates />
    </json:array>
  </json:object>
</xsl:template>

<!-- Array member -->  
<xsl:template match="*[parent::*[ name(*[1])=name(*[2]) ]] | /">
  <json:object>
    <xsl:apply-templates />
  </json:object>
</xsl:template>

<!-- Object -->  
<xsl:template match="*">
  <json:object name="{name()}">
    <xsl:apply-templates />
  </json:object>
</xsl:template>

<!-- String -->
<xsl:template match="*[not(*)]">
  <json:string name="{name()}">
    <xsl:value-of select="." />
  </json:string>
</xsl:template>
</xsl:stylesheet>

输出是如此...

<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
  <json:object name="Login">
    <json:object name="Groups">
      <json:array name="Group">
        <json:object>
          <json:string name="Name">john</json:string>
          <json:string name="Password"></json:string>
        </json:object>
        <json:object>
          <json:string name="Name">john</json:string>
          <json:string name="Password"></json:string>
        </json:object>
      </json:array>
    </json:object>
  </json:object>
</json:object>

这篇关于XML 到 JSONX 需要通用 xslt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 19:03