如何更改父节点中的属性?
How can I change an attribute in a parent node?
这是 XML 块:
<Object type="proto">
<Name value="test1"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="10"/>
</Object>
<Object type="proto">
<Name value="test2"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="20"/>
</Object>
如何在复制期间仅更改 'test1' 的 'Time' 的值?
这是一种可能的方式:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Object[Name/@value='test1']/Time">
<xsl:copy>
<xsl:attribute name="value">30</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
关于 xsl:template
正在使用的简要说明:
<xsl:template match="@* | node()">...
:标识模板;将节点和属性复制到输出 XML,未更改。
<xsl:template match="Object[Name/@value='test1']/Time">...
:覆盖 <Time>
元素的标识模板,即 <Object>
的直接子元素 Name/@value
等于 test1
。此模板复制匹配的 <Time>
元素并将属性 value
更改为 30
.
这是 XML 块:
<Object type="proto">
<Name value="test1"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="10"/>
</Object>
<Object type="proto">
<Name value="test2"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="20"/>
</Object>
如何在复制期间仅更改 'test1' 的 'Time' 的值?
这是一种可能的方式:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Object[Name/@value='test1']/Time">
<xsl:copy>
<xsl:attribute name="value">30</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
关于 xsl:template
正在使用的简要说明:
<xsl:template match="@* | node()">...
:标识模板;将节点和属性复制到输出 XML,未更改。<xsl:template match="Object[Name/@value='test1']/Time">...
:覆盖<Time>
元素的标识模板,即<Object>
的直接子元素Name/@value
等于test1
。此模板复制匹配的<Time>
元素并将属性value
更改为30
.