【发布时间】:2014-09-20 12:20:11
【问题描述】:
我有以下示例来验证 xslt 样式表。在各种论坛中都提到我们应该为 xslt 2.0 样式表使用“net.sf.saxon.TransformerFactoryImpl”。根据我已经更新了我的代码。但是这段代码只适用于少数情况。例如,该代码不适用于我在下面附加的示例。如果我将示例样式表版本更改为 1 (version="1.0"),那么代码可以正常工作。否则失败。我相信示例样式表是有效的 xslt 2.0 文档。
这会导致很多问题,如何在解析之前验证样式表?
package com.ibm.mq.id;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.stream.StreamSource;
import net.sf.saxon.TransformerFactoryImpl;
public class xsltTransformationEx {
/**
* @param args
*/
public static void main(String[] args) {
String path="C://Work//ex.xsl";
TransformerFactoryImpl factory = new TransformerFactoryImpl();
try
{
javax.xml.transform.Templates template = factory.newTemplates(new StreamSource(path));
//VALIDATING XSLT is valid or not
//Transformer trans = factory.newTransformer(new StreamSource(path));
template.newTransformer();
}
catch(TransformerConfigurationException ex)
{
ex.printStackTrace();
}
}
}
下面是我的示例 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
<xsl:output indent="yes" method="xml"/>
<xsl:variable name="FamilyMembers" select="bpws:getVariableData('HSPACT_FamlyNumbers')"></xsl:variable>
<xsl:template match="Molers_Output">
<xsl:element name="Molers_Output">
<!--
<xsl:element name="row">
<xsl:value-of select="row"/>
</xsl:element>
-->
<xsl:for-each select="row[Hosp_Acct_Num = $FamilyMembers/rows/row/normalize- space(HACCT_)]">
<xsl:variable name="Account"><xsl:value-of select="Hosp_Acct_Num"></xsl:value-of></xsl:variable>
<xsl:element name="row">
<xsl:for-each select="node()">
<xsl:choose>
<xsl:when test="name()='Family_Num'">
<xsl:element name="Family_Num">
<xsl:value-of select="$FamilyMembers/rows/row[normalize-space(HACCT_) = $Account]/HAFAM_"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy copy-namespaces="yes" inherit-namespaces="yes">
<xsl:value-of select="current()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
失败是什么意思?
-
嗨,Jean 失败了 .. 当我在 Eclipse 中运行这个程序时,我收到了这个错误
-
xsl 错误:ex.xsl 的第 6 行第 93 列的变量:XPST0017:{...bleData('HSPACT_FamlyNumber...} 中第 6 行的第 43 行字符的 XPath 语法错误:找不到名为 {schemas.xmlsoap.org/ws/2003/03/business-process}getVariableData() javax.xml.transform.TransformerConfigurationException 的匹配 1 参数函数:无法编译样式表。检测到 1 个错误。在 net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:176) atnet .sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:139) at com.ibm.mq.id.xsltTransformationEx.main(xsltTransformationEx.ja
-
@Jean-FrançoisSavard 我刚刚更新了原始问题摘要,提供了更多详细信息
标签: xslt-2.0