2012-07-25 48 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;     
     }