2015-07-22 28 views
1

这是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的”时间'的价值?

+0

显示期望的输出结果如何,以及到目前为止XSL代码的含义 – har07

+0

我已经拥有基本身份副本,它将复制整个块及其节点和属性。但是我想改变test1的时间值,比如10到30。我需要了解如何指定更改只影响test1块。 – luigi

+0

下次请发布您已拥有的XSL代码,以便人们可以将其答案基于该XSL。这样,要提到一些好处,希望答案对你更容易理解,并且更容易写给帮手。谢谢 – har07

回答

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 S是使用

简要说明:

  • <xsl:template match="@* | node()">...:身份模板;将节点和属性复制到输出XML中,保持不变。
  • <xsl:template match="Object[Name/@value='test1']/Time">...:覆盖<Time>元素的身份模板,即子女<Object>的子女Name/@value等于test1。该模板复制匹配的<Time>元素并将属性value更改为30
+0

非常感谢!我不知道你可以在比赛中指定'Object [Name/@ value ='test1'] /' – luigi

相关问题