我已经基于围绕修改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/