我正在使用返回转义XML的Web服务。我需要解除它并对其进行转换。我试图弄清楚如何在单个变换中做到这一点,因为我得到了这个错误:
变量$ result的值的必需项类型是element();供应 value具有项类型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
答案 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()"/>
。