2012-07-25 51 views
0

這讓我很生氣,我一直在嘗試這個爲期2天。Xdocument修改所有匹配的屬性

我基本上想要基於名稱來替換值。

我有XML如下:

<session> 
     <immediate> 
     <diff name="TEST_DIFF"> 
      <pivot name="(Original)"> 
      <grid-processor name="mdStoredShape"/> 
      <axes> 
       <axis position="SLICERS"> 
       <attribute name="Result Namespace" mode="INCLUSIVE"> 
        <selection value="$NAMESPACE$"/> 
       </attribute> 
       <attribute name="Date" mode="INCLUSIVE"> 
        <selection value="$DATEFROM$"/> 
       </attribute> 
       <attribute name="Book" mode="INCLUSIVE"> 
        <selection value="$BOOK_NAME$" type="Book Hierarchy"/> 
       </attribute> 
       <attribute name="Measure" mode="INCLUSIVE"> 
        <exclude value="PV"/> 
       </attribute> 
       <attribute name="Risk Source System" mode="INCLUSIVE"> 
        <selection value="gdsldn"/> 
       </attribute> 
       <attribute name="Is Error"> 
        <selection value="false"/> 
       </attribute> 
       </axis> 
       <axis position="DISCRIMINATOR"> 
       <attribute name="Book" mode="ALL"/> 
       <attribute name="Book" mode="ALL"/> 
       <attribute name="Measure" mode="ALL"/> 
       </axis> 
       <axis position="RESULT"> 
       <attribute name="SUM(Money Value In(GBP))"/> 
       <attribute name="COUNT_DISTINCT(Book)"/> 
       </axis> 
      </axes> 
      </pivot> 
      <pivot name="(New)"> 
      <grid-processor name="mdStoredShape"/> 
      <axes> 
       <axis position="SLICERS"> 
       <attribute name="Result Namespace" mode="INCLUSIVE"> 
        <selection ref="$NAMESPACE$"/> 
       </attribute> 
       <attribute name="Date" mode="INCLUSIVE"> 
        <selection ref="$DATETO$"/> 
       </attribute> 
       <attribute name="Book" mode="INCLUSIVE"> 
        <selection value="$BOOK_NAME$" type="Book Hierarchy"/> 
       </attribute> 
       <attribute name="Measure" mode="INCLUSIVE"> 
        <exclude ref="PV"/> 
       </attribute> 
       <attribute name="Risk Source System" mode="INCLUSIVE"> 
        <selection value="gdsldn"/> 
       </attribute> 
       <attribute name="Is Error"> 
        <selection value="false"/> 
       </attribute> 
       </axis> 
       <axis position="DISCRIMINATOR"> 
       <attribute name="Book" mode="ALL"/> 
       <attribute name="Book" mode="ALL"/> 
       <attribute name="Measure" mode="ALL"/> 
       </axis> 
       <axis position="RESULT"> 
       <attribute name="SUM(Money Value In(GBP))"/> 
       <attribute name="COUNT_DISTINCT(Book)"/> 
       </axis> 
      </axes> 
      <source name="risk"/> 
      </pivot> 
     </diff> 
    </immediate> 
</session> 

,我想用實際值替換所有的$ namespace $值。

有人可以幫忙嗎?

更多的信息,我用

XElement xeNS = Xdoc.Descendants("selection").First(el => (String)el.Attribute("value").Value == "$NAMESPACE$"); 
      xeNS.SetAttributeValue("value", ns); 

但這隻能替換第一個實例。我希望linq查詢然後循環並應用更改?

回答

1

如果多數民衆贊成,爲什麼你不使用「xml」.replace(「oldavalue」,「newvalue」)?

+0

我沒有在Xdocument中的方法? – user1156000 2012-07-25 11:51:14

+1

我打算使用xml作爲字符串並使用string.Replace。無論如何,你的錯誤是在第一。首先改變到哪裏 – 2012-07-25 11:53:31

0

我設法解決它到底 - 選擇正確的屬性然後遍歷元素..

變種查詢=從X在Xdoc.Descendants(「選擇」) 其中x.Attribute (「value」)。值==「$ BOOK_NAME $」 select x;

 foreach (XElement xe in query) 
     { 
      xe.Attribute("value").Value = book;     
     }