使用as =" element"时输入错误在变量上

时间:2015-02-20 18:31:01

标签: xml xslt xslt-2.0

我正在使用返回转义XML的Web服务。我需要解除它并对其进行转换。我试图弄清楚如何在单个变换中做到这一点,因为我得到了这个错误:

  

变量$ result的值的必需项类型是element();供应   value具有项类型text()

使用此XML:

  <MyServiceResponse>
    <MyServiceResult>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;vector&gt;&lt;num&gt;1100070561&lt;/num&gt;&lt;/vector&gt;</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

1 个答案:

答案 0 :(得分:1)

使用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()"/>