更改具有与特定正则表达式模式匹配的标记的 xml 树中的值
Change value in xml tree having a tag that matches particular regex 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>
我是 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>