-2

我有一个 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 文件的标题:

<?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>
4

2 回答 2

1

鉴于您修改后的问题,我的猜测是模板规则永远不会被激活,因为您永远不会xsl:apply-templates在相关节点上调用。要使模板规则生效,必须满足两个条件:您必须选择相关节点进行处理(在xsl:apply-templates select表达式中),并且模板规则必须与这些节点匹配(并且是这些节点的最高优先级/优先级模板规则)。

于 2017-10-23T17:56:14.393 回答
1

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

所以:您显示的样式表和输入确实是您正在使用的,在这种情况下,您应该看到抱怨非 XML 输入的错误消息(以及无效的样式表,由于您显示的 XSLT 中的错误注释),或者您已经以消除问题的方式缩写样式表。在后一种情况下,您现在知道问题出在您删除的材料上;那是什么。

于 2017-10-23T17:41:38.817 回答