Преобразование объекта JSON без корневого имени - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь преобразовать мой объект JSON с помощью for-each, но у меня нет корневого элемента.Вот мой объект, номера узлов могут быть больше.

[       
{
  "id": "1",
  "href": "string",
  "description": "string",
  "isBundle": true,
  "isCustomerVisible": true,
  "name": "string",
  "productSerialNumber": "string",
  "productNumber": "string",
  "startDate": "2018-11-27T13:26:22.783Z",
  "endDate": "2018-11-27T13:26:22.783Z",
  "status": "created"
},
{
  "id": "2",
  "href": "string",
  "description": "string",
  "isBundle": true,
  "isCustomerVisible": true,
  "name": "string",
  "productSerialNumber": "string",
  "productNumber": "string",
  "startDate": "2018-11-27T13:26:22.783Z",
  "endDate": "2018-11-27T13:26:22.783Z",
  "status": "created"
},
{
  "id": "3",
  "href": "string",
  "description": "string",
  "isBundle": true,
  "isCustomerVisible": true,
  "name": "string",
  "productSerialNumber": "string",
  "productNumber": "string",
  "startDate": "2018-11-27T13:26:22.783Z",
  "endDate": "2018-11-27T13:26:22.783Z",
  "status": "created"
}
]

И что я пытаюсь с моим xsl-преобразованием:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
    <xsl:template match="/">
        <jsonObject xmlns:json="http://json.org/">
            <requestResponse>
                <xsl:choose>
                    <xsl:when test="count(//id) > 0">
                        <returnCode>100</returnCode>
                        <returnMessage>SUCCESS</returnMessage>
                    </xsl:when>
                    <xsl:otherwise>
                        <returnCode>9999</returnCode>
                        <returnMessage>BUSINESS_FAULT</returnMessage>
                    </xsl:otherwise>
                </xsl:choose>
            </requestResponse>

            <xsl:for-each select="@*|node()">           
                    <xsl:if test="id">
                        <id>
                            <xsl:value-of select="/id" />
                        </id>
                    </xsl:if>
            </xsl:for-each>                     
        </jsonObject>
    </xsl:template>
</xsl:stylesheet>

Если у меня есть корневое имя моего объекта, ямогу справиться с этим, но мне нужна помощь здесь.Заранее спасибо за любую идею!

1 Ответ

0 голосов
/ 20 июня 2019

В массиве имен без полномочий root json вы можете использовать ниже xslt для тега <id>.Ключевой момент - <jsonArray><jsonElement></jsonElement></jsonArray> appoach.Но вы должны быть осторожны с <jsonElement>, оно должно быть в блоке <xsl:for-each select="//jsonArray/jsonElement">.Чтобы не раскрывать для каждого синдрома, вы не должны писать корневой элемент для полей в нем.Например <xsl:if test="id">.

<xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:fn="http://www.w3.org/2005/xpath-functions"
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns1="http://www.qas.com/OnDemand-2011-03"
        xmlns:json="http://json.org">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
    <xsl:template match="/">
        <jsonArray>
            <xsl:for-each select="//jsonArray/jsonElement">
                <jsonElement>   
                    <xsl:if test="id">
                        <id><xsl:value-of select="id" /> </id>
                    </xsl:if>
                </jsonElement>
            </xsl:for-each>
        </jsonArray>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...