基本信息是我有一个带ID的元素
我想在文档中使用ID-Attribute() - 函数来提取-element的内容
我有两个问题:
1)我的撒克逊处理器不解决任何修复!我在de Document Function
中提供的文件路径- >结果:FODC0005文档已标记为不可用:文件路径
问题:为什么???
到目前为止,这是我的代码:
<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>
2)我的第二个问题是,我无法弄清楚如何使用我的ID作为文件名
如果有人有小费或其他什么我真的无能为力。
提前致谢
编辑:3文档() - 函数用于测试Saxon开始搜索文档的位置
编辑:
所以我正在使用以下文件夹设置:
Folder 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-00AA-941A-D.xml
路径应该是正确的。 Saxon在控制台中打印它们,但缺少@ID信息,或者如果我提供像(../XML/1.xml)这样的固定路径,他会检查文件夹但是找不到文件。
我是否有可能在Saxon9he中启用文档功能?
或者是否有其他解决方案从其他文件中提取元素内容?
感谢您的帮助
答案 0 :(得分:1)
文档(更确切地说,URI)被标记为不可用&#34;在两种情况下:
(1)你调用提供该URI的doc-available(),答案是假的
(2)你调用提供该URI的doc()或document(),并发生错误。
在情况(2)中,您通常会在第一次尝试访问URI时看到原始失败,因此除非您使用try / catch来抑制错误,否则这不太可能。样式表是否使用doc-available()?
您的实验似乎表明您还没有弄清楚如何解析相对URI。 document()的规则是:
如果您提供节点,例如document(@ID),那么@ID中的相对URI将根据找到该节点的元素的基URI进行解析(即,通常是转型的源文件)
如果提供字符串,例如concat(@ID,&#39; .xml&#39;),则会根据样式表的基URI解析相对URI。
例如,您可以通过输出base-uri(。)来检查源文档的基URI。您可以使用static-base-uri()检查样式表的基URI。有时会出现问题,因为基本URI不为人所知;例如,如果转换的输入是作为DOM提供的话,就会发生这种情况。
我希望这可以帮助你前进。如果您仍有问题,我们需要知道
(a)document()的参数是什么
(b)源文档和样式表的基本URI是
(c)您希望阅读的文件的完整路径是什么
答案 1 :(得分:0)
我认为,这是撒克逊人的错误。
但是有解决方法:-):
<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>