TEI header - 无法解析 (SAXON)

TEI header - cannot parse (SAXON)

我有一个 TEI P5 有效 xml 文件,我已经成功地使用 Saxon-PE 9 解析了该文件。

但是,我无法获得 'biblStruct/monogr/imprint/date' 值。

据我所知 - 解析器无法识别 'sourceDesc' 节点,但它可以识别处于同一层级的 'titleStmt'。 有谁知道我的问题的解决方案是什么?

具体来说:

<xsl:template match="tei:titleStmt">

确实有效,但是

<xsl:template match="tei:biblStruct">

<xsl:template match="tei:biblStruct/tei:monogr/tei:imprint/tei:date">

不会。也就是说,输出为空,<xsl:message>Parser successfully got here.</xsl:message> 根本没有触发。

这将是 XML 文件的 header:

<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
    <teiHeader>
        <fileDesc>
            <titleStmt>
                <title>Zaveza</title>
                <title>Revija</title>
                <title>Elektronska </title>
            </titleStmt>
            <editionStmt>
                <edition>0.1</edition>
            </editionStmt>
            <extent> KB XML </extent>
            <publicationStmt>
                <publisher>
                    <address>
                    </address>
                </publisher>
            </publicationStmt>
            <sourceDesc>
                <biblStruct>
                    <monogr>
                        <title>Zaveza</title>
                        <imprint>
                            <biblScope type="issue">10</biblScope>
                            <biblScope type="vol">XXVI</biblScope>
                            <biblScope>številka 4, december 2016</biblScope>
                            <date when="2016-12">2016</date>
                        </imprint>
                    </monogr>
                </biblStruct>
            </sourceDesc>
        </fileDesc>
    </teiHeader>
--
</TEI>

这是 XLS 的一部分:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" 
                xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                xmlns:html="http://www.w3.org/1999/xhtml"

                xmlns:rng="http://relaxng.org/ns/structure/1.0"
                xmlns:tei="http://www.tei-c.org/ns/1.0"
                xmlns:teix="http://www.tei-c.org/ns/Examples"

                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0"
                exclude-result-prefixes="a fo rng tei teix">

    <doc xmlns="http://www.oxygenxml.com/ns/doc/xsl">
        <desc>Process element teiHeader</desc>
    </doc>
    <xsl:template match="tei:date">
        <xsl:message>Parser successfully got here.</xsl:message>
    </xsl:template>

</xsl:stylesheet>

鉴于您提供的输入和 XSLT 样式表,我无法重现您的问题。当显示的输入 运行 时,您提供的样式表确实会产生输出(一旦输入中的格式错误得到修复并且提供了 xsl:stylesheet 元素的结束标记),以及用于的模板tei:date 实际上会处理输入中的日期元素。这在输出中很容易看出,因为元素的内容没有出现在输出中:这就是显示的模板的目的。

因此:您显示的样式表和输入确实是您正在使用的,在这种情况下,您应该会看到错误消息抱怨非 XML 输入(以及无效的样式表,由于错误在您显示的 XSLT 中发表评论), 您已经以消除问题的方式缩写了样式表。在后一种情况下,您现在知道问题出在您删除的 material 中;就是这样。

根据您修改后的问题,我的猜测是模板规则从未激活,因为您从未在相关节点上调用 xsl:apply-templates。要使模板规则生效,必须满足两个条件:必须 select 相关节点进行处理(在 xsl:apply-templates select 表达式中),并且模板规则必须匹配那些节点(并且是这些节点的最高 priority/precedence 模板规则)。