【发布时间】:2019-05-06 13:43:38
【问题描述】:
我有以下示例 xml 输入。
<RootElement xmlns="http://example.com">
<aa>test</aa>
<bb>ffff</bb>
<cc>dere</cc>
<givenDate>2016-07-23T00:00:00.000+00:00</givenDate>
</RootElement>
我想生成以下响应消息。
{
"abc" : "2016-07-23"
}
为此,我尝试使用以下 xslt。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://example.com" version="1.0" exclude-result-prefixes="ns">
<xsl:output method="text" omit-xml-declaration="yes" indent="no" encoding="UTF-8" media-type="application/json"/>
<xsl:template match="/">
<xsl:text>{</xsl:text>
<xsl:text>"abc": </xsl:text>
<xsl:variable name="givenDate" select="substring-before(//ns:RootElement/ns:givenDate, 'T')"/>
<xsl:value-of select="ns:set_value($givenDate)"/>
<xsl:text>}</xsl:text>
</xsl:template>
<xsl:function name="ns:set_value">
<xsl:param name="givenDate"/>
<xsl:choose>
<xsl:when test="$givenDate/text() !=''">
<xsl:text>"</xsl:text><xsl:value-of select="$givenDate"/><xsl:text>"</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
</xsl:stylesheet>
当时我收到以下错误消息。 无法使用提供的 XML/XSL 输入生成 XML 文档。 '/'的第一个操作数的必需项类型是node();提供的值具有项目类型 xs:string
我对 XSLT 不太熟悉。你对这个问题有什么想法吗?
【问题讨论】:
-
将
<xsl:when test="$givenDate/text() !=''">更改为<xsl:when test="$givenDate !=''">。传递给函数的$givenDate是一个 xs:string 变量,因此您不能/不需要获取它的text()值。 -
您的样式表显示
version="1.0"。xsl:function指令是 XSLT 2.0 的一个特性。 -
@zx485 - 感谢您的建议。这是工作。现在没有错误消息。但是预期的消息没有按预期出现。输出 - {"abc": "}
-
@KittyKotte:输出错误,因为您没有修复样式表的版本。因此,将
version="1.0"更改为version="2.0",代码将按预期工作。