我正在尝试为XML输入执行xslt转换。只要xml输入具有瑞典字符,xslt转换就会失败。有人可以帮我解决这个问题。客户端需要按原样传递北欧字符。
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="EmploymentUpdateRequests">
<xsl:copy>
<xsl:for-each-group select="EmploymentUpdateRequest"
group-by="descendant::FieldValue[@Name ='FORNAMN']">
<xsl:sort select="descendant::FieldValue
[@Name ='FORNAMN']/ValidFrom"
order="ascending"/>
<xsl:copy-of select="current-group()"/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
后记
输入如下:
<FieldValue Name="FORNAMN" Type="String">
<ValidFrom Format="yyyy-MM-dd">2017-08-18</ValidFrom>
<ValidUntil Format="yyyy-MM-dd">2099-12-31</ValidUntil>
<Value>Nicoleta Geta ÅåÄäÖö</Value>
</FieldValue>
我收到类似
的错误无法运行'sortXMLByValidFrom'com.wm.app.b2b.server.ServiceException:net.sf.saxon.trans.DynamicError:org.xml.sax.SAXParseException; lineNumber:76; columnNumber:28; 2字节UTF-8序列的字节2无效。
答案 0 :(得分:0)
错误消息告诉您输入不是UTF-8,这反过来告诉我们XSLT处理器认为输入应该 bei(UTF-8)(1 )因为文档内编码声明是这样说的,或者(2)因为没有文档内编码声明,并且处理器已经猜到字符编码是UTF-8而不是UTF-16(这些只是两个选项)没有字符编码声明的XML。)
在第一种情况下,文档内编码声明显然是在撒谎,应该进行更改以便说明真相。
在第二种情况下,您应该提供正确的编码声明。根据您的输入具有瑞典字符和错误消息的措辞的陈述,我猜想输入是在ISO 8859的某些变体中编码的,可能是ISO 8859-1,-10或-15。
您的问题与XSLT无关,而且与您的输入是(a)不是UTF-8或UTF-16以及(b)未声明其字符编码这一事实有关。