【问题标题】:What is the XSLT to convert the below XML into JSON?将以下 XML 转换为 JSON 的 XSLT 是什么?
【发布时间】:2019-03-12 20:25:39
【问题描述】:
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Oracle BI Publisher -Dataengine, datamodel:_Custom_OAL_ATG_OM_Dashboard_DM_xdm -->
<DATA>
<SUCCESS>
<COUNT___>5686</COUNT___>
</SUCCESS>
<REJECT>
<COUNT___>641</COUNT___>
</REJECT>
<FAILURE>
<COUNT___>8536</COUNT___>
</FAILURE>
<ERROR>
<COUNT___>1447</COUNT___>
</ERROR>
<TERMINATED>
<COUNT___>1341</COUNT___>
</TERMINATED>
</DATA>

上面是我拥有的 XML。我想将上面的 XML 转换成如下所示的 JSON。

{
"appName": "PERFORMANCE",
"statsName": "Status Counts",
"DateBegin": "xxxxxx",
"DateEnd": "xxxxxxx",
"data": {
 "SUCCESS ": 1341,
"REJECT":5666,  "FAILURE":640,
 "ERROR":8515,
"TERMINATED":1447
}
}

我是 XSLT 样式表的新手。有人可以帮我解决上述问题吗?将给定的 XML 转换为 JSON 的 XSLT 样式表是什么?

【问题讨论】:

  • @Alejandro:这不是重复的,因为给定的问题要求 XSLT-1.0 解决方案,而您的重复包含 XSLT-3.0 解决方案。
  • @zx485 在 XSLT 1.0 的上下文中也有很多关于 XML 到 JSON 转换的答案。他们都在处理你的答案所缺乏的主题。

标签: json xml xslt xslt-1.0 xml-to-json


【解决方案1】:

您可以使用以下样式表。它适用于给定的输入 XML:

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

  <xsl:template match="/DATA">
      <xsl:text>{
    "appName": "PERFORMANCE",
    "statsName": "Status Counts",
    "DateBegin": "xxxxxx",
    "DateEnd": "xxxxxxx",
    "data": 
      </xsl:text>{&#xa;<xsl:apply-templates select="*" /><xsl:text>&#xa;}&#xa;}</xsl:text>
  </xsl:template>

  <xsl:template match="SUCCESS|REJECT|FAILURE|ERROR|TERMINATED">
    <xsl:value-of select="concat('&quot;',local-name(),'&quot;: ',COUNT___)" />
    <xsl:if test="position() != last()">,&#xa;</xsl:if>
  </xsl:template>

</xsl:stylesheet>

它的输出是:

{
"appName": "PERFORMANCE",
"statsName": "Status Counts",
"DateBegin": "xxxxxx",
"DateEnd": "xxxxxxx",
"data": 
{
"SUCCESS": 5686,
"REJECT": 641,
"FAILURE": 8536,
"ERROR": 1447,
"TERMINATED": 1341
}
}

输出与您想要的输出不匹配,因为输入 XML 和想要的输出 XML 之间存在一些不一致。根据需要更改 XSLT。

【讨论】:

  • 感谢您的回答。这就是我要找的。我还有另一个问题。无论如何,我可以获得 Unix 纪元格式而不是 xxxx 的 DateBegin 和 DateEnd 吗? DateEnd 应该是 XSLT 中的当前时间,DateBegin 应该比 DateEnd 早 10 分钟。任何帮助表示赞赏。我是新手。
  • @KarthikGullapalli:请提出一个新问题作为问题而不是评论。谢谢。
  • @KarthikGullapalli:这是一个全新的问题。你甚至没有指定它的值(目前它们被标记为'xxxx')。
  • @zx485 是的,我想将其添加为一个新问题,但我不知道它是否适合此问题或将其添加为一个全新的问题。但是,您能帮我弄清楚如何获取时间吗?
  • @KarthikGullapalli:您无法使用 XSLT-1.0 获取时间。因此,您应该提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多