XSLT-将每个XML属性值匹配并替换为特定的属性值

XSLT-将每个XML属性值匹配并替换为特定的属性值,xslt,xslt-1.0,xslt-2.0,Xslt,Xslt 1.0,Xslt 2.0,我想替换来自第三方软件的控制XML文件中的通配符 不幸的是,这些通配符也用作此XML文件中的属性值 我给大家举个例子: <control> <some-tag id="$wildcard1$" version="3.14"> <another-tag id="second_level">stackoverflow rocks!</another-tag> </some-tag> <some-tag id="fo

我想替换来自第三方软件的控制XML文件中的通配符

不幸的是,这些通配符也用作此XML文件中的属性值

我给大家举个例子:

<control>
  <some-tag id="$wildcard1$" version="3.14">
    <another-tag id="second_level">stackoverflow rocks!</another-tag>
  </some-tag>
  <some-tag id="foo" version="$wildcard2$"/>
  <some-tag id="bar" version="145.31.1"/>
</control>

堆积如山的岩石!
我试图编写一个带有参数的通用转换来替换属性值中的通配符


我最大的问题是,我不知道属性名。所以我需要匹配XML文件中的每个属性。这很容易但如何将每个属性与特定值(例如$wildcard$)匹配?这个问题的答案比我想象的要简单得多

<xsl:template match="@*[. = $wildcard]">
    <xsl:attribute name="{name(.)}">
        <xsl:value-of select="$wildcard_value"/>
    </xsl:attribute>
</xsl:template>

我希望它能帮助别人

注意:下面是我的完整XSL转换,用于替换属性值中的通配符:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:param name="wildcard" required="yes" />
    <xsl:param name="wildcard_value" required="yes" />
    <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes" />
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@*[. = $wildcard]">
        <xsl:attribute name="{name(.)}">
            <xsl:value-of select="$wildcard_value" />
        </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

注意,
match=“*/*[.=$wildacard]”
可以缩短为
match=“@*[.=$wildacard]”
。如果您真的使用XSLT版本3.0,那么您可以简单地声明
,而不是第一个模板。我还注意到,您声明的参数名是
name=“wildcard”
,但您的代码引用了
$wildacard
。仅适用于企业版的saxon。所以我决定将样式表标记为2.0版