代码之家  ›  专栏  ›  技术社区  ›  Ben

从xmlDocument中选择特定的xml节点,然后更改xml节点的属性

  •  2
  • Ben  · 技术社区  · 14 年前

    在C语言的xml文档中有一个简单的xml节点,我想查询它,然后将visible属性的值设置为false。下面是xml。我需要能够通过节点名称(DGField)和文本id选择节点(测试.ChangeRank). 有人知道怎么做吗?提前谢谢。

    <DGField text_id="Test.ChangeRank" template="Ranking" visible="true">
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   Chris Taylor    14 年前

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

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

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

    我在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']");
    
        2
  •  1
  •   Aliostad    14 年前

    以下是XML方法:

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