2010-09-07 62 views
1

我在C#中想要查询的xml文档中有一个简单的xml节点,然后将visible属性的值设置为false。下面是xml。我需要能够通过节点名称(DGField)和text_id(Test.ChangeRank)来选择节点。有谁知道如何做到这一点?提前致谢。从xmlDocument中选择特定的xml节点,然后更改xml节点的属性

<DGField text_id="Test.ChangeRank" template="Ranking" visible="true"> 

回答

6

假设您的XmlDocument被称为doc,那么以下内容应该可以工作。

XmlNode node = doc.SelectSingleNode("//DGField[@text_id='Test.ChangeRank']"); 
    if (node != null) 
    { 
    node.Attributes["visible"].Value = "false"; 
    } 

这可以做更多的错误检查,以确保属性被改变存在等等,但这使它保持干净。

基本上,第一行使用XPath表达式来定位其中text_id ='Test.ChangeRank'的DGField元素。如果找到,则返回节点,然后用于操作所需的属性值。

我在XPath查询中使用了'//'语法,以便搜索整个Xml文档,这不是最优的,更具体的XPath可以更好地执行。例如,如果你有这样看起来是这样的

<root> 
    <DGFields> 
    <DGField text_id='1' template='Ranking' visible='true' /> 
    <DGField text_id='Test.ChangeRank' template='Ranking' visible='true' /> 
    </DGFields> 
</root> 

然后更具体的XPath查询可以使用类似下面的

XmlNode node = doc.SelectSingleNode(
    "root/DGFields/DGField[@text_id='Test.ChangeRank']"); 
0

有这样做的各种方式一个完整的文件。我会认为使用XmlDocument和正则表达式是最好的选择。

这里是XML的方法:

 XmlDocument xdoc = new XmlDocument(); 
     xdoc.Load(@"c:\myxml.xml"); 
     XmlNode xn = xdoc.SelectSingleNode("//DGField[@text_id='Test.ChangeRank']"); 
     xn.Attributes["visible"].Value = "false";