value-of select =“document($ path)/ ns0:element1 / ns0:element2”使用SAXON-B XSLT 2.0(saxon9)返回NULL

时间:2014-03-13 04:58:59

标签: xml xslt-2.0 saxon

下面的getdetails.xslt代码(XSLT 2.0)通过文档()读取user-config.xml的内容。

代码成功地对Saxon 9.4.0.6起作用,并且ns0:project_abs_path的值在xml输出中可见,如下所示

<?xml version = "1.0" encoding = "UTF-8"?>
<xmlString>&lt;?xml version="1.0" encoding="UTF-8"?> C:\myProject</xmlString>

但是,当在TIBCO转换活动中针对SAXON-B XSLT 2.0(saxon9)运行相同的XSLT代码时,将返回以下xml输出(注意:ns0:project_abs_path没有值)。

<?xml version = "1.0" encoding = "UTF-8"?>
<xmlString>&lt;?xml version="1.0" encoding="UTF-8"?></xmlString>

*没有返回错误。

用户-config.xml中

<?xml version="1.0" encoding="UTF-8"?>
<ns0:userRules xmlns:ns0="http://www.tibco.com/schemas/-bw/SharedResources/Schema.xsd">
    <ns0:project_abs_path>C:\myProject1</ns0:project_abs_path>
</ns0:userRules>

getdetails.xslt

<?xml version='1.0'?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.tibco.com/schemas/bw/SharedResources/Schema.xsd" 
xmlns:ns1="http://www.tibco.com/schemas/bw/SharedResources/rule-db.xsd">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:param name="invar_ruleid"/>
<xsl:variable name="var_installation_path">C:\FOLDER</xsl:variable>
<xsl:variable name="var_user_config_path" select="concat($var_installation_path,'\bin\user-config.xml')"/>
<xsl:variable name="var_project_abs_path" select="document($var_user_config_path)/ns0:userRules/ns0:project_abs_path"/>
<xsl:variable name="file">file:///</xsl:variable>
<xsl:variable name="var_out_file_path" select="concat($file,$var_project_abs_path)"/>
<xsl:template match="/">
<xsl:value-of select="document(concat($var_installation_path,'\bin\user-config.xml'))/ns0:userRules/ns0:project_abs_path"/> 
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

说“返回NULL”是一个非常模糊的问题。你能更明确吗?您是否看到异常,撒克逊错误消息或转换结果不正确?如果您看到异常,是否可以显示堆栈跟踪?如果您看到Saxon错误消息,您能告诉我们它是什么吗?

你的代码唯一明显错误的是你正在构建一个Windows文件名(格式为“c:\ a \ b \ c”)并将其传递给document()函数,该函数需要一个URI。从理论上讲,这总是错误的,但有些应用程序会容忍它。您应该传递“file:/// c:/ a / b / c”形式的URI。我不知道这是否是问题的原因。