如何更改父节点中的属性?

时间:2015-07-22 07:48:39

标签: xml xslt 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”的“时间”值?

1 个答案:

答案 0 :(得分:1)

这是一种可能的方式:

<?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更改为<p> Name @Html.TextBox("Name") Date @Html.TextBox("Date") <input type="submit" id="SubmitName" value="Submit" /> </p>