基本信息是我有一个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>