有没有办法检查节点之间是否有文本

时间:2015-01-28 14:34:04

标签: xml xslt xslt-2.0

我有以下两种不同的XML案例。

案例1

<para><content-style font-style="bold">1/3</content-style> This is text</para>

情况2

<para>This is text <content-style font-style="bold">1/3</content-style></para>

我使用模板匹配如下

<xsl:template match="para[content-style[matches(., '(\w+)/(\w+)')]]">

但是根据这场比赛,上述两种情况都得到了满足,我只想要抓住第一种情况而忽略了第二种情况。

请让我知道如何完成这项工作。

由于

1 个答案:

答案 0 :(得分:2)

无需使用matches()。如果规则是content-style元素是para的第一个子节点,则匹配

para[node()[position() = 1 and self::content-style]]

假设以下输入文档中存在两种情况:

XML输入

<root>
    <para><content-style font-style="bold">1/3</content-style>YES</para>
    <para>NO <content-style font-style="bold">1/3</content-style></para>
</root>

XSLT样式表

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="para[node()[position() = 1 and self::content-style]]">
        <xsl:copy-of select="."/>
    </xsl:template>

    <xsl:template match="text()"/>

</xsl:stylesheet>

XML输出

<?xml version="1.0" encoding="UTF-8"?>
<para>
   <content-style font-style="bold">1/3</content-style>YES</para>