使用XSLT更新XML节点

时间:2014-05-21 21:03:18

标签: xslt

<Instance xsi:type="ButtonConfig">
    <Name>ExitButton</Name>
    <Height>89</Height>
    <Width>120</Width>
    <Margin>
        <All>-1</All>
        <Bottom>0</Bottom>
        <Left>400</Left>
        <Right>0</Right>
        <Top>11</Top>
     </Margin>        
</Instance>

在上面的xml中,我需要将左边距更改为420.如何使用XSLT进行操作?

2 个答案:

答案 0 :(得分:3)

正如任何XSLT教程都会告诉你的那样:对于像这样简单的事情,从身份样式表开始,它基本上没有复制文档......然后添加一个实现异常的模板。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Margin/Left">
    <xsl:copy>
      <xsl:text>420</xsl:text>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:3)

这几乎是“identify transform”,它只是复制了输入文档。

这是一个简单的样式表,主要执行身份转换,同时覆盖<Left/><Margin/><Instance/>的{​​{1}}输出,其中<Name/>包含ExitButton xsi 1}}。请注意,我必须在<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="Margin/Left[ancestor::Instance/Name[text()='ExitButton']]"> <Left>420</Left> </xsl:template> </xsl:stylesheet> 的输入XML中添加命名空间定义,我假设它在文档的其他位置。

{{1}}