1
當我嘗試使用以下樣式錶轉換XMl時,轉換失敗,出現錯誤Expected QName
。什麼是缺少在styelesheet,粘貼在下面?XSL轉換失敗:預期QName
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:output method="xml" indent="yes" version="1.0"/>
<xsl:variable name="origo-svc-augmented" select="'Y'"/>
<xsl:variable name="origo-svc-ns" select="'http://www.origoservices.com'"/>
<xsl:template match="node()">
<xsl:variable name="namespace" select="namespace-uri(.)"/>
<xsl:choose>
<!--xsl:when test="$namespace = ''
or ($origo-svc-augmented='Y' and $namespace=$origo-svc-ns)"-->
<xsl:when test="$origo-svc-augmented = 'N'">
<xsl:element name="{local-name()}">
<xsl:copy-of select="namespace::*[not(namespace-uri()=$origo-svc-ns)]"/>
<xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{local-name()}" namespace="{$namespace}">
<xsl:copy-of select="namespace::*"/>
<xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
UPDATE:從提供的答案將建議後,樣式表工作正常,更新的樣式表如下
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:output method="xml" indent="yes" version="1.0"/>
<xsl:variable name="origo-svc-augmented" select="'Y'"/>
<xsl:variable name="origo-svc-ns" select="'http://www.origoservices.com'"/>
<xsl:template match="*">
<xsl:variable name="namespace" select="namespace-uri(.)"/>
<xsl:choose>
<!--xsl:when test="$namespace = ''
or ($origo-svc-augmented='Y' and $namespace=$origo-svc-ns)"-->
<xsl:when test="$origo-svc-augmented = 'Y'">
<xsl:element name="{local-name()}">
<xsl:copy-of select="namespace::*[not(namespace-uri()=$origo-svc-ns)]"/>
<xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{local-name()}" namespace="{$namespace}">
<xsl:copy-of select="namespace::*"/>
<xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|comment()|processing-instruction()|text()">
<xsl:copy>
<xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我已經將您的建議應用於我的樣式表,現在看起來工作正常。我用修改過的樣式表更新了這個問題 – user2607367