需要将PI移动到根元素内

时间:2014-03-28 07:33:36

标签: xslt

我有一个xml文件,它以顶部的处理指令开头。所以,我需要将这个PI ('?change' not '?xml')替换为根元素内部。我的意思是下面的情景是原始的,看看PI

<?xml version="1.0" encoding="UTF-8"?>
<?change id="69817" type="addition" mark="start"?>
<part id="PARTIII">
    <title><p just="center" fli="0" li="0" ri="0" before="1" after="1">PART 3</p>
        <p fli="0" li="0" ri="0" just="center" before="0"><font size="normal" smallcaps="yes">Mergers and Acquisitions</font></p></title>
    <div class="annotations">

因此,我需要将根元素之前的第一个PI(更改)移动到根元素内。我怎么能做到这一点。有什么帮助吗?

我的意思是上面的代码应该是(查看PI'更改')

<?xml version="1.0" encoding="UTF-8"?>

    <part id="PARTIII"><?change id="69817" type="addition" mark="start"?>
        <title><p just="center" fli="0" li="0" ri="0" before="1" after="1">PART 3</p>
            <p fli="0" li="0" ri="0" just="center" before="0"><font size="normal" smallcaps="yes">Mergers and Acquisitions</font></p></title>
        <div class="annotations">

1 个答案:

答案 0 :(得分:1)

尝试以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

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

    <xsl:template match="processing-instruction()[following-sibling::part]"/>

    <xsl:template match="part">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:copy-of select="preceding-sibling::processing-instruction()"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>