如何区分案件

时间:2014-06-09 08:09:13

标签: xslt xslt-2.0

我有以下两条XML行

 <para>
<content-style font-style="bold">abcdefg</content-style> This is out of content-style</para>
<para>
This is out of <content-style font-style="bold">abcdefg</content-style> content-style</para>

这里在第一个XML行中,para将子节点设为content-style并且它之间没有任何内容,在第二个XML中有一些文本(或者甚至可以有更多节点)在paracontent-style之间,我只想知道如何使用XSLT来区分这两种情况。

感谢。

1 个答案:

答案 0 :(得分:0)

使用以下输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <para>
        <content-style font-style="bold">abcdefg</content-style> This is out of content-style</para>
    <para> This is out of <content-style font-style="bold">abcdefg</content-style>
        content-style</para>
</root>

尝试以下样式表:

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

    <xsl:strip-space elements="*"/>

    <xsl:output indent="yes"/>

    <xsl:template match="/">
        <root>
            <this_case><xsl:copy-of select="root/para[node()[1][name()='content-style']]"/></this_case>
            <other_case><xsl:copy-of select="root/para[node()[1][name()!='content-style']]"/></other_case>
        </root>
    </xsl:template>

</xsl:stylesheet>

表达式root/para[node()[1][name()='content-style']]表示root元素,其子para的第一个节点的名称为content-style。第二个恰恰相反。

由于硬回车被视为文本节点,因此必须使用<xsl:strip-space elements="*"/>