2015-07-22 30 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

相關問題