簡體   English   中英

從xmlDocument中選擇特定的xml節點,然后更改xml節點的屬性

[英]Select specific xml node from xmlDocument then change xml node's attribute

我在C#中的xml文檔中有一個簡單的xml節點,我想查詢,然后將visible屬性的值設置為false。 下面是xml。 我需要能夠通過節點名稱(DGField)和text_id(Test.ChangeRank)選擇節點。 有誰知道如何做到這一點? 提前致謝。

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

假設您的XmlDocument被稱為doc,那么以下內容應該可行。

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

這可以通過更多的錯誤檢查來確保更改的屬性存在等,但這樣可以保持干凈。

基本上第一行使用XPath表達式來定位DGField元素,其中text_id ='Test.ChangeRank'。 如果找到,則返回node,然后用於操作所需的屬性值。

我在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']");

有很多方法可以做到這一點。 我認為使用XmlDocument和Regex是最好的選擇。

這是XML方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM