xml - 更改XML属性的值会删除其他属性

标签 xml xslt xpath

我已经基于围绕修改XML属性值的StackOverflow的各种问题创建了一个简单的XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
</xsl:template>
<xsl:template match="@Name[.='Source']">
    <xsl:attribute name="Id">MROClass</xsl:attribute>
</xsl:template>




我将其应用于以下XML:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="TARGETDIR">
            <Directory Id="dirD33FABDFBCD72FAC87416BC87B4323D1" Name="Source" />
        </DirectoryRef>
    </Fragment>
</Wix>


问题是修改了Id属性,但删除了Name属性。如何修改单个属性而不删除其他属性?我尝试使用复制和其他方法,但结果始终相同。

样本输出:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="TARGETDIR">
            <Directory Id="MROClass" />
        </DirectoryRef>
    </Fragment>
</Wix>

最佳答案

Name属性已删除,因为这就是您要匹配的属性。

如果要更新Id属性,但基于Name属性,请尝试更改:

match="@Name[.='Source']"


至:

match="*[@Name='Source']/@Id"

关于xml - 更改XML属性的值会删除其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47874418/

相关文章:

xslt - 使用 XSLT 解析 XML 字符串

java - 使用 Selenium WebDriver 确认网页中显示文本

java - 使用java代码在xpath中标记化

Java:将 XML 映射到其他 XML(翻译)

java - XPATH 查询不返回结果

java - Camel : xsl transformation doesn't indent xml

xml - XSLT - 剪切和粘贴

java - 如何在android中从java获取变量值到xml文件?

java - 撒克逊 XSLT。扩展函数只调用一次

Java(JAXP) 和 XSLT : Overwriting the XML file