在变量上使用 as="element" 时出现类型错误
Type error when using as="element" on a variable
我正在使用 returns 转义 XML 的 Web 服务。我需要取消转义并对其进行转换。鉴于出现此错误,我正在尝试找出如何在单个转换中执行此操作:
Required item type of value of variable $result is element(); supplied
value has item type text()
用这个 XML:
<MyServiceResponse>
<MyServiceResult><?xml version="1.0" encoding="UTF-8"?>
<vector><num>1100070561</num></vector></MyServiceResult>
</MyServiceResponse>
使用此样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" exclude-result-prefixes="xs">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/MyServiceResponse">
<xsl:variable name="result" as="element()">
<xsl:value-of select="MyServiceResult" disable-output-escaping="yes"/>
</xsl:variable>
<CustomerID xmlns="http://myURL.com">
<xsl:value-of select="$result/*"/>
</CustomerID>
</xsl:template>
</xsl:stylesheet>
我正在使用 Saxon-EE 9.6.0.4J
使用 Saxon EE,您可以完全访问 XSLT 3.0 或 Saxon 的扩展函数 http://saxonica.com/html/documentation/functions/saxon/parse.html 所以我会简单地解析结果,例如<xsl:variable name="result" select="saxon:parse(MyServiceResult)" xmlns:saxon="http://saxon.sf.net/"/>
。这将为您提供一个文档节点,然后您可以输出其包含的节点,例如<xsl:copy-of select="$result/node()"/>
.
我正在使用 returns 转义 XML 的 Web 服务。我需要取消转义并对其进行转换。鉴于出现此错误,我正在尝试找出如何在单个转换中执行此操作:
Required item type of value of variable $result is element(); supplied value has item type text()
用这个 XML:
<MyServiceResponse>
<MyServiceResult><?xml version="1.0" encoding="UTF-8"?>
<vector><num>1100070561</num></vector></MyServiceResult>
</MyServiceResponse>
使用此样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" exclude-result-prefixes="xs">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/MyServiceResponse">
<xsl:variable name="result" as="element()">
<xsl:value-of select="MyServiceResult" disable-output-escaping="yes"/>
</xsl:variable>
<CustomerID xmlns="http://myURL.com">
<xsl:value-of select="$result/*"/>
</CustomerID>
</xsl:template>
</xsl:stylesheet>
我正在使用 Saxon-EE 9.6.0.4J
使用 Saxon EE,您可以完全访问 XSLT 3.0 或 Saxon 的扩展函数 http://saxonica.com/html/documentation/functions/saxon/parse.html 所以我会简单地解析结果,例如<xsl:variable name="result" select="saxon:parse(MyServiceResult)" xmlns:saxon="http://saxon.sf.net/"/>
。这将为您提供一个文档节点,然后您可以输出其包含的节点,例如<xsl:copy-of select="$result/node()"/>
.