无法从 JSON 数据中获取价值

Cannot get out value from JSON data

正在解析 XSLT 中的 JSON 数据并尝试获取指定的键值。我控制了 XSLT 在解析 JSON 时生成的 XML 映射,我确实找到了值为“car”的键。

问题:我没有在结果中得到预期的值。

您可以在此处找到代码:xsltfiddle

这里添加相同的代码:

JSON:

<data>
{
  "storage": {
    "car": "Volvo"
  }
}
</data>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    
    <xsl:output method="xml" indent="yes" html-version="5"/>
    
    <!-- Block all data that has no user defined template -->
    <xsl:mode on-no-match="shallow-skip"/>
    
    <!-- Transform JSON to XML -->
    <xsl:template match="data">
      <xsl:apply-templates select="json-to-xml(.)/*"/>
      <!-- Select -->
      <xsl:value-of select="//*[@key='car']"/>
    </xsl:template>
    
    <!-- Print map -->
  
  <!--  
  <xsl:template match="*[@key = 'storage']"> 
    <xsl:copy-of select=".."/> 
  </xsl:template> 
  -->
  
</xsl:stylesheet>

结果

<?xml version="1.0" encoding="UTF-8"?>

想要的结果

<?xml version="1.0" encoding="UTF-8"?>
Volvo

我想你需要这个:

<!-- Transform JSON to XML -->
<xsl:template match="data">
  <!-- Select -->
  <xsl:value-of select="json-to-xml(.)//*[@key='car']"/>
</xsl:template>

获得:

<?xml version="1.0" encoding="UTF-8"?>Volvo

为此,我不会将 JSON 转换为 XML:我会将其解析为 XDM 映射,然后在映射中查找值。因此:

<xsl:value-of select="parse-json(.)?storage?car"/>

您在评论中写道:

Still don't understand though why my code does not work

事实上,我们经常犯这样的错误,即只提供有效的代码,却不告诉您哪里做错了。

你的错误在这里:

   <xsl:apply-templates select="json-to-xml(.)/*"/>
   <xsl:value-of select="//*[@key='car']"/>

您有两条指令,您希望第二条指令对第一条指令的结果进行操作。但这不是 XSLT 的工作方式;这些指令中的每一个都对相同的输入起作用(具体来说,它们中的每一个都将源文档中的 data 元素作为输入)。所以 //*[@key='car'] 没有 select 任何东西,因为在原始源文档中没有任何东西与此匹配。

如果你想让第二条指令应用到第一条指令的结果,你可以把第一条指令的结果放在一个变量中:

<xsl:variable name="converted-input">
   <xsl:apply-templates select="json-to-xml(.)/*"/>
</xsl:variable>
<xsl:value-of select="$converted-input//*[@key='car']"/>

或者,正如@sspsujit 所做的那样,您可以将其全部折叠成一条指令,因为 xsl:apply-templates 实际上并没有做任何有趣的事情。