XSLT Document()函数导致Saxon错误/ Attribute-String不能用作文件路径



基本信息是我有一个ID为

的元素

我想在文档中使用ID-Attribute ()-Function来提取-元素

的内容

我有两个问题:

1)我的撒克逊处理器不会解决任何固定!我在de Document Function

中提供的文件路径

->RESULT: FODC0005文档已被标记为不可用:Filepath

问题:为什么?

这是我到目前为止的代码:

<xsl:template match="pmentry"><xsl:apply-templates/></xsl:template>
<xsl:template match="refdm"><xsl:apply-templates/></xsl:template>
<xsl:element name="datamodule">
<xsl:element name="DMC">DMC-<xsl:value-of select="modelic"/>-<xsl:value-of select="sdc"/>-<xsl:value-of select="chapnum"/>-<xsl:value-of select="section"/><xsl:value-of select="subsect"/>-<xsl:value-of select="subject"/>-<xsl:value-of select="discode"/><xsl:value-of select="discodev"/>-<xsl:value-of select="incode"/><xsl:value-of select="incodev"/>-<xsl:value-of select="itemloc"/>
</xsl:element>
<xsl:element name="CSH">
<xsl:attribute name="ID">DMC-<xsl:value-of select="modelic"/>-<xsl:value-of select="sdc"/>-<xsl:value-of select="chapnum"/>-<xsl:value-of select="section"/><xsl:value-of select="subsect"/>-<xsl:value-of select="subject"/>-<xsl:value-of select="discode"/><xsl:value-of select="discodev"/>-<xsl:value-of select="incode"/><xsl:value-of select="incodev"/>-<xsl:value-of select="itemloc"/></xsl:attribute>
<xsl:value-of  select="document(concat('../XML/',@ID,'.xml'))/dmodule/idstatus/status/remarks"/>
</xsl:element>

</xsl:element>
</xsl:template>

我的第二个问题是,我不知道如何使用我的ID作为文件名

如果有人有什么建议,我真的不知道怎么做。

Thanks in advance

编辑:3 document()-函数已经用于测试,Saxon开始搜索文档

编辑:

所以我在以下文件夹设置中工作:

文件夹Playground:子文件夹XSLT和XML

批处理文件与文件夹

在同一层
 java -jar XSLT/saxon9he.jar -s:FLARE_Publicationmodul.xml -o:XSLT/remark_list.xml  -xsl:XSLT/read_remarks_part1.xsl 

现在我的计划是生成这个xml文件:

<?xml version="1.0" encoding="utf-8"?>
<list>
<datamodule>
<DMC>DMC-S1000DBIKExsd-AAA-01-00-0000-00A-001A-A</DMC>
<CSH ID="DMC-S1000DBIKExsd-AAA-01-00-0000-00A-001A-A"> Content of the Remarks Element</CSH>
</datamodule>
<datamodule>
<DMC>DMC-S1000DBIKExsd-AAA-D00-00-00-00AA-941A-D</DMC>
<CSH ID="DMC-S1000DBIKExsd-AAA-D00-00-00-00AA-941A-D"> Content of the Remarks Element</CSH>
</datamodule>
...
</list>

所以concat路径应该像这样:

. ./XML/dmc - s1000dbikexsd aaa - d00 - 00 - 00 - 00 - aa - 941 a - d.xml

Path应该是正确的。Saxon在控制台中打印它们,但缺少@ID信息,或者如果我提供固定路径(../XML/1.xml),他检查Folder,但没有找到文件。

我是否有可能在Saxon9he中启用文档函数?

或者是否有其他解决方案来从其他文件中提取元素内容?

Thanks for your Help

文档(更确切地说,是URI)在两种情况下被"标记为不可用":

(1)您调用doc-available()提供该URI,答案是false

(2)您调用doc()或document()提供该URI,并且发生错误。

在情况(2)中,您通常会在第一次尝试访问URI时看到原始失败,因此除非您使用try/catch来抑制错误,否则不太可能出现这种情况。样式表是否使用doc-available()?

您的实验似乎表明您还没有完全弄清楚相对uri是如何被解析的。document()的规则是:

  • 如果您提供一个节点,例如document(@ID),那么@ID中的相对URI将根据找到该节点的元素的基本URI进行解析(通常是转换的源文档的URI)

  • 如果您提供一个字符串,例如concat(@ID, '.xml'),那么相对URI将根据样式表的基本URI进行解析。

您可以通过输出base- URI(.)来检查源文档的基URI,例如;您可以使用static-base-uri()检查样式表的基URI。有时会出现问题,因为不知道基本URI;例如,如果转换的输入是作为DOM提供的,就会发生这种情况。

我希望这能帮助你前进。如果你还有问题,我们需要知道

(a) document()的参数是什么

(b)源文档和样式表的基URI

(c)您希望读取的文件的完整路径是什么

我想,这是撒克逊人的错误。

但是有一个解决方法:-):

    <xsl:function name="fix:doc" as="document-node()?" visibility="final">
        <xsl:param name="fix:uri" as="xs:string?" required="yes"/>
        <xsl:if test="exists( $fix:uri )">
            <xsl:source-document href="{ $fix:uri }">
                <xsl:sequence select="/"/>
            </xsl:source-document>
        </xsl:if>
    </xsl:function>

相关内容

最新更新