Я пытаюсь преобразовать XML в JSON с использованием определения XSLT. У меня есть требуемый вывод, но я хочу, чтобы корневой тег из моего json-вывода удалялся при преобразовании, пожалуйста, помогите мне с этим.Удалить корневой тег в JSON с помощью XSLT при преобразовании XML в JSON
ввод XML
<ArrayOfApiInvoiceReport xmlns="http://schemas.datacontract.org/2004/07/RepSpark.WebServices.Models">
<BillingAddress1>10 N LUMINA AVE</BillingAddress1>
<BillingAddress2/>
<BillingCity>WRIGHTSVILLE BEACH</BillingCity>
<BillingCountry>US</BillingCountry>
<BillingCustomerCode>3003800</BillingCustomerCode>
<BillingCustomerName>SWEETWATER SURF SHOP</BillingCustomerName>
<BillingState>NC</BillingState>
<BillingZip>28480</BillingZip>
<InvoiceAmount>372.72</InvoiceAmount>
<InvoiceCreatedDate>20141110</InvoiceCreatedDate>
<InvoiceItems>
<InvoiceItemSizes>
<InvoiceLineNumber>1</InvoiceLineNumber>
<InvoicedQuantity>3</InvoicedQuantity>
<SizeCode>L</SizeCode>
<UPC>9348282095644</UPC>
</InvoiceItemSizes>
<InvoiceLineNumber>1</InvoiceLineNumber>
<InvoiceNumber>101000005</InvoiceNumber>
<InvoiceItems>
</ArrayOfApiInvoiceReport
XSLT используется
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="yes"/>
<!-- Object or Element Property-->
<xsl:template match="*">
<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>
токовый выход JSON
"ArrayOfApiInvoiceReport" : [{
"BillingAddress1" : "10 N LUMINA AVE",
"BillingAddress2" : "",
"BillingCity" : "WRIGHTSVILLE BEACH",
"BillingCountry" : "US",
"BillingCustomerCode" : "3003800",
"BillingCustomerName" : "SWEETWATER SURF SHOP",
"BillingState" : "NC",
"BillingZip" : "28480",
"InvoiceAmount" : "372.72",
"InvoiceCreatedDate" : "20141110",
"InvoiceItems" : [{
"InvoiceItemSizes" : [{
"InvoiceLineNumber" : "1",
"InvoicedQuantity" : "3",
"SizeCode" : "L",
"UPC" : "9348282095644"
}],
"InvoiceLineNumber" : "1",
"InvoiceNumber" : "101000005",
"InvoicedQuantity" : "3",
Обязательный выход является JSON без "ArrayOfApiInvoiceReport"
[{
"BillingAddress1": "10 N LUMINA AVE",
"BillingAddress2": "",
"BillingCity": "WRIGHTSVILLE BEACH",
"BillingCountry": "US",
"BillingCustomerCode": "3003800",
"BillingCustomerName": "SWEETWATER SURF SHOP",
"BillingState": "NC",
"BillingZip": "28480",
"InvoiceAmount": "372.72",
"InvoiceCreatedDate": "20141110",
"InvoiceItems": [
{
"InvoiceItemSizes": [
{
"InvoiceLineNumber": "1",
"InvoicedQuantity": "3",
"SizeCode": "L",
"UPC": "9348282095644"
}
],
"InvoiceLineNumber": "1",
"InvoiceNumber": "101000005",
"InvoicedQuantity": "3",
Пожалуйста, помогите мне с этим.
Требуемая мощность составляет без «ArrayOfApiInvoiceReport». выход должен начинаться с [{"BillingAddress1": "10 N ...............}] –
Siva, у меня есть несколько вопросов по вашему вопросу. XML недействителен как" InvoiceItems " узел закрыт неправильно, на выходе JSON нет закрытия для «InvoiceItems»; в конце есть дополнительное «InvoicedQuantity», без соответствующего элемента во входном XML - это вычисленное ?, а JSON заканчивается запятой - это то, что вы хотите? – JohnRC