XML需要一般XSLT到JSONX



可能的重复:
使用XSLT

将XML转换为JSONX

任何人都可以帮助我以下面的数组。我必须生成广义的XSL。输入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和输出,但不能如上所述。请帮助我。

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

您可能是说组应该是一个数组,组应该是一个对象,而不是相反?

尝试此...

<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的更新要求,这是一个新的解决方案。

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

相关内容

  • 没有找到相关文章

最新更新