我想在另一个元素中移动属性值,但它在多个实例中生成?

时间:2017-11-08 04:38:29

标签: xml xslt xpath

输入必须删除空标题部分。

<?xml version="1.0" encoding="UTF-8"?>
<book>
    <section counter="yes" level="5">
        <title>
            <target id="page92"/>
        </title>
        <section counter="yes" level="6">
            <title>Standard 12-lead ECG at Rest</title>
            <para>para para para para para para para para para para para para para para </para>
            <listing type="dash">
                <litem>
                    <para>para para para para para para para para para para para para para para
                    </para>
                </litem>
                <litem>
                    <para>para para para para para para para para para para para para para para
                    </para>
                </litem>
            </listing>
            <para>para para para para para para para para para para para para para para </para>
        </section>
        <section counter="yes" level="6">
            <title>ECG in Exercise Stress Testing</title>
            <para>para para para para para para para para para para para para para para </para>
            <listing type="dash">
                <litem>
                    <para>para para para para para para para para para para para para para para
                    </para>
                </litem>
                <litem>
                    <para>para para para para para para para para para para para para para para
                    </para>
                </litem>
            </listing>
        </section>
        <section counter="yes" level="6">
            <title>Long-term ECG Recording</title>
            <figure id="c006_f011">
                <legend>
                    <para><emph type="bold">a, b</emph> para para para para para para para para para
                        para para para para para </para>
                </legend>
                <subfigure>
                    <graphic position="center" fileref="images/9783131644312_c006_f011.jpg"/>
                </subfigure>
            </figure>
            <para>para para para para para para para para para para para para para para </para>
        </section>
        <section counter="yes" level="6">
            <title>ECG Monitoring</title>
            <para>para para para para para para para para para para para para para para </para>
        </section>
    </section>
</book>

我正在使用XSLT进行转换以删除具有空标题的部分并在第一部分中移动其目标/ @ id:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">


    <xsl:output method="xml" indent="no" encoding="UTF-8"/>        

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="section[ancestor::book]">        
        <xsl:choose> 
            <xsl:when test="not(normalize-space(title))">                
                <xsl:apply-templates select="node() except title"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy><xsl:apply-templates select="node() | @*"/></xsl:copy>
            </xsl:otherwise>
        </xsl:choose> 
    </xsl:template>

    <xsl:template match="para[not(preceding-sibling::para) and parent::section/parent::section[normalize-space(title)='']/title/target and ancestor::section[not(normalize-space(title))]/section]">
        <para>
            <xsl:attribute name="amr_id" select="parent::section/parent::section[normalize-space(title)='']/title/target/@id"/>
            <xsl:apply-templates select="@*"/>
            <xsl:apply-templates/>
        </para>
    </xsl:template>

    <xsl:template match="target">
        <xsl:choose>
            <xsl:when test="contains(@id, 'page') and normalize-space(parent::title)=''"/>
            <xsl:otherwise>
                <xsl:copy-of select="."/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

输出我能够生成:

<book>
    <section counter="yes" level="6">
        <title>Standard 12-lead ECG at Rest</title>
        <para amr_id="page92">para para para para para para para para para para para para para para </para>
        <listing type="dash">
            <litem>
                <para>para para para para para para para para para para para para para para </para>
            </litem>
            <litem>
                <para>para para para para para para para para para para para para para para </para>
            </litem>
        </listing>
        <para>para para para para para para para para para para para para para para </para>
    </section>
    <section counter="yes" level="6">
        <title>ECG in Exercise Stress Testing</title>
        <para amr_id="page92">para para para para para para para para para para para para para para </para>
        <listing type="dash">
            <litem>
                <para>para para para para para para para para para para para para para para </para>
            </litem>
            <litem>
                <para>para para para para para para para para para para para para para para </para>
            </litem>
        </listing>
    </section>
    <section counter="yes" level="6">
        <title>Long-term ECG Recording</title>
        <figure id="c006_f011">
            <legend>
                <para><emph type="bold">a, b</emph> para para para para para para para para para
                    para para para para para </para>
            </legend>
            <subfigure>
                <graphic position="center" fileref="images/9783131644312_c006_f011.jpg"/>
            </subfigure>
        </figure>
        <para amr_id="page92">para para para para para para para para para para para para para para
        </para>
    </section>
    <section counter="yes" level="6">
        <title>ECG Monitoring</title>
        <para amr_id="page92">para para para para para para para para para para para para para para
        </para>
    </section>
</book>

要注意: @amr_id正在每个部分生成所有段落,我只想要第一段/段。

0 个答案:

没有答案