2010-07-10 57 views
3

我知道了編寫XML文檔罰款單XML屬性,它會是這個樣子修改C#

<Team> 
    <Character Name="Bob" Class="Mage"/> 
    <Character Name="Mike" Class="Knight"/> 
</Team> 

我試圖找到一種方法來訪問「類」的屬性一個字符並修改它。到目前爲止,我已經找到了指明特定字符的點,但我無法弄清楚如何訪問'Class'屬性並對char進行修改。

void Write(string path, string charName, string varToChange, string value){ 

    XmlNode curNode = null; 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(path); 

    XmlElement rootDoc = doc.DocumentElement; 
    curNode = rootDoc; 

    if(curNode.HasChildNodes){ 

     for(int i=0; i<curNode.ChildNodes.Count; i++){ 

      if(charName == curNode.ChildNodes[i].Attributes.GetNamedItem("Name").Value){ 

       // Code would go here 
      } 
     } 
    } 
    return; 
} 

回答

3

使用XmlElement.SetAttribute(「屬性修改」,「值設置爲」)方法

編輯: 我你使用的XMLNode代替的XMLElement,所以在剛剛注意到爲了更新屬性,你可以只投了XmlNode的一個XmlElement的,像這樣

XmlElement el = (XmlElement)curNode; 
el.SetAttribute("Class", "Value"); 

否則,您可以創建一個屬性,然後才能將其追加更新的屬性:

XmlAttribute attrib = 
curNode.OwnerDocument.CreateAttribute("Class"); 
attrib.Value = "Value"; 
curNode.Attributes.Append(attrib); 

希望這有助於

3

使用XPath:

XmlDocument doc = new XmlDocument(); 
doc.Load(path); 

var nodes = doc.SelectNodes(String.Format("/Team/Character[@Name=\"{0}\"]", charName)); 

foreach (XmlElement n in nodes) 
{ 
    n.SetAttribute(varToChange, value); 
} 
+1

XML獲得約10倍更容易,一旦你瞭解XPath的工作。 – 2010-07-11 01:14:01

+0

'XDocument'會怎樣? – 2015-01-22 20:19:51