首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查XML中是否存在一个子级

如何检查XML中是否存在一个子级
EN

Stack Overflow用户
提问于 2021-03-22 12:07:20
回答 1查看 37关注 0票数 0

我有一个xslt脚本,它将tei:bibl元素转换为HTML。

代码语言:javascript
复制
<xsl:template match="tei:bibl//tei:author">
    <span class="smallcaps">
        <xsl:apply-templates select="tei:surname"/>
    </span>
    <xsl:text>, </xsl:text>
    <xsl:apply-templates select="tei:forename"/>
    <xsl:if test="tei:nameLink">
        <xsl:text> </xsl:text>
        <xsl:apply-templates select="tei:nameLink"/>
    </xsl:if>
    <xsl:apply-templates select="text()"/>
    <xsl:text>, </xsl:text>
    <xsl:if test=".[following-sibling::tei:author]">
    <xsl:text> / </xsl:text> 
        <span class="smallcaps">
            <xsl:text> </xsl:text>
            <xsl:apply-templates select="tei:surname"/>
        </span>
        <xsl:text>, </xsl:text>
        <xsl:apply-templates select="tei:forename"/>
        <xsl:if test="tei:nameLink">
            <xsl:text> </xsl:text>
            <xsl:apply-templates select="tei:nameLink"/>
        </xsl:if>
        <xsl:text> , </xsl:text>
    </xsl:if>
</xsl:template>

XML如下所示:

代码语言:javascript
复制
        <bibl xml:id="capitani_ua_bannerherr">
            <abbr>
                <surname type="author">Capitani</surname> u.a., Bannerherr</abbr>
            <author>
                <forename>François</forename>
                <nameLink>de</nameLink>
                <surname>Capitani</surname>
            </author>
            <author>
                <surname>Weck</surname>
                <forename>Hervé</forename>
                <nameLink>de</nameLink>
            </author>
            <title>Bannerherr [Venner]</title>
            <bibl>
                <title>Historisches Lexikon der Schweiz (HLS)</title>
                <date>Version vom 07.05.2009</date>
            </bibl>
            <ref target="http://www.hls-dhs-dss.ch/textes/d/D8612.php" type="ex">[Online]</ref>
        </bibl>

我的HTML是这样的:

代码语言:javascript
复制
<span id="capitani_ua_bannerherr" class="rs-ref">
    <span class="smallcaps">Capitani</span>, François de,  / 
    <span class="smallcaps"> Capitani</span>, François de , 
    <span class="smallcaps">Weck</span>, Hervé de, Bannerherr [Venner], in: Historisches Lexikon der Schweiz (HLS), Version vom 07.05.2009<a href="http://www.hls-dhs-dss.ch/textes/d/D8612.php"> [Online]
</a>.
</span>

模板按照它的要求来做。然而,它使第一个条目加倍(此处为<span class="smallcaps"> Vapitani </span>, Francois de, )

我尝试过添加一个类似于以下内容的<xsl:choose>

代码语言:javascript
复制
<xsl:template match="tei:bibl//tei:author">
        <xsl:choose>
            <xsl:when test="[count(tei:bibl//tei:author)=1]">
                <span class="smallcaps">
                    <xsl:apply-templates select="tei:surname"/>
                </span>
                <xsl:text>, </xsl:text>
                <xsl:apply-templates select="tei:forename"/>
                    <xsl:if test="tei:nameLink">
                        <xsl:text> </xsl:text>
                        <xsl:apply-templates select="tei:nameLink"/>
                    </xsl:if>
                <xsl:apply-templates select="text()"/>
                <xsl:text>, </xsl:text>
            </xsl:when>
            <xsl:when test=".[following-sibling::tei:author]">
        <xsl:text> / </xsl:text>
            <span class="smallcaps">
                <xsl:text> </xsl:text>
                <xsl:apply-templates select="tei:surname"/>
            </span>
            <xsl:text>, </xsl:text>
            <xsl:apply-templates select="tei:forename"/>
            <xsl:if test="tei:nameLink">
                <xsl:text> </xsl:text>
                <xsl:apply-templates select="tei:nameLink"/>
            </xsl:if>
            <xsl:text> , </xsl:text>
        </xsl:when>
        </xsl:choose>

</xsl:template>

这应该会产生这样的输出:

代码语言:javascript
复制
<span id="capitani_ua_bannerherr" class="rs-ref">
        <span class="smallcaps">Capitani</span>, François de,  / 
        <span class="smallcaps">Weck</span>, Hervé de, Bannerherr [Venner], in: Historisches Lexikon der Schweiz (HLS), Version vom 07.05.2009<a href="http://www.hls-dhs-dss.ch/textes/d/D8612.php"> [Online]
    </a>.
</span>

我做错了什么?我不需要任何特定版本的XSLT,我们可以使用XSLT1-3。

一切顺利,K

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-22 12:29:27

您当前的模板是“如果有以下作者,输出姓氏和名字”。它没有说“输出以下作者的姓氏和名字”。

我不是百分之百确定,但你似乎想要以下几点:

<tei:bib>

  • 2nd作者与第一个作者与/

  • any分离的作者列表,与,

分隔的作者

让我们把它写下来,就这样:

代码语言:javascript
复制
<xsl:template match="tei:bibl//tei:author">
    <xsl:if test="position() = 2"> / </xsl:if>
    <xsl:if test="position() &gt; 2"> , </xsl:if>
    <span class="smallcaps">
        <xsl:apply-templates select="tei:surname" />
    </span>
    <xsl:text>, </xsl:text>
    <xsl:apply-templates select="tei:forename" />
    <xsl:if test="tei:nameLink">
        <xsl:text> </xsl:text>
        <xsl:apply-templates select="tei:nameLink" />
    </xsl:if>
</xsl:template>

现在,您可以以直截了当的方式调用它。

代码语言:javascript
复制
<xsl:template match="tei:bibl">
    <xsl:apply-templates select="tei:author" />
    <!-- ...output the title etc here --->
</xsl:template>

和get (为可读性格式化):

代码语言:javascript
复制
<span xmlns:tei="tei" class="smallcaps">Capitani</span>, François de
/ <span xmlns:tei="tei" class="smallcaps">Weck</span>, Hervé de
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66745729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档