更改 xml 树中的值,该标记与特定正则表达式 patterm 匹配



我是xsl的新手,遇到了一个问题。

我有一个像这样的 xml:

<abc>
    <def>
        <ghi>
            <hello:abcXYZ>1</hello:abcXYZ>
            <hello:defXYZ>10</hello:defXYZ>
            <hello:defXYZ>11</hello:defXYZ>
            <hello>5<hello>
        </ghi>
    </def>
</abc>

我想在 xsl 中有一个模板匹配,以便对于树"abc/def/ghi"中的标签,匹配模式"hello*XYZ"(以"hello"开头,以"XYZ"结尾),里面的值应该替换为零。

这样,输出 xml 将如下所示:

<abc>
    <def>
        <ghi>
            <hello:abcXYZ>0</hello:abcXYZ>
            <hello:defXYZ>0</hello:defXYZ>
            <hello:defXYZ>0</hello:defXYZ>
            <hello>5<hello>
        </ghi>
    </def>
</abc>

任何人都可以帮忙。谢谢。

假设 XSLT 2.0,将您的描述转换为正则表达式模式和匹配模式并不难:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pattern" select="'hello.*XYZ'"/>
<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="abc/def/ghi/*[matches(name(), $pattern)]">
  <xsl:copy>0</xsl:copy>
</xsl:template>
</xsl:stylesheet>

这改变了

<abc xmlns:hello="http://example.com/">
    <def>
        <ghi>
            <hello:abcXYZ>1</hello:abcXYZ>
            <hello:defXYZ>10</hello:defXYZ>
            <hello:defXYZ>11</hello:defXYZ>
            <hello>5</hello>
        </ghi>
    </def>
</abc>

<abc xmlns:hello="http://example.com/">
    <def>
        <ghi>
            <hello:abcXYZ>0</hello:abcXYZ>
            <hello:defXYZ>0</hello:defXYZ>
            <hello:defXYZ>0</hello:defXYZ>
            <hello>5</hello>
        </ghi>
    </def>
</abc>

相关内容

  • 没有找到相关文章