我有以下两种不同的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+)')]]">
但是根据这场比赛,上述两种情况都得到了满足,我只想要抓住第一种情况而忽略了第二种情况。
请让我知道如何完成这项工作。
由于
答案 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>