xquery fn:id无效,即使type = xs:id似乎被正确声明了

时间:2018-05-17 10:30:35

标签: xml xslt-2.0 xpath-2.0

我正在使用Altova在服务器上运行的XSLT转换。我需要使用撒克逊解析器调整一些东西并使用Oxgen在本地工作。由于某种原因,fn:id()不起作用,它返回一个空节点。解释相当复杂的设置:

我的输入(input.xml):

<position id="pos_1">
    <protected>true</protected>
    <titel>Secret Business</titel>
    <entry id="entry_1">
        <title>Some Business</title>
        <year>2008</year>
    </entry>
</position>

第二个输入被读入一个变量(见下文),它看起来像那个(ProcessData.xml):

<goose:process-data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.goose.org" xmlns:goose="http://www.goose.org" xsi:schemaLocation="http://www.goose.org ProcessData.xsd">>
    <goose:Collection>
        <goose:Package id="entry_1">
            <goose:PID>1234-4321-asdf</goose:PID>
        </goose:Package>
 ....

我的XSLT:

<!-- Reading in second input (process information) -->
<xsl:param name="process-data-path" select="xs:string('file:///home/documents/some/path/to/ProcessData.xml')"
<xsl:variable name="process-data" select="document($process-data-path)"
<!-- get the value of element <goose:PID> that corresponds to the id in 'input.xml' -->
<xsl:variable name="pid">
    <xsl:value-of select="fn:element-with-id(@id,$process-data)/goose:PID"/>
</xsl:variable>

现在我知道id元素的正确输入(此处https://stackoverflow.com/a/9269053/1717188或此处https://stackoverflow.com/a/6369296/1717188)。如果我在ProcessData.xml中编写xml:id,它可以正常工作。但这不是文件的创建方式。相应的模式(ProcessData.xsd)确实声明了id-Attribute,如下所示:<xs:attribute name="id" type="xs:ID" use="required"/>

在过去的几个小时里,我有很多想法可能是错的。其中之一:通过使用type="xs:ID"将树读入变量,document()是否会以某种方式丢失?

0 个答案:

没有答案