2012-10-16 80 views
7

我有一個xmldocument,我正在加載xml。如何將內部文本插入空的xml元素?

的XML看起來是這樣的:

<Table1> 
    <buyer_id>0</buyer_id> 
    <buyername>CompanyA</buyername> 
    <address1>123 Simpsons Dr.</address1> 
    <address2/> 
    <city>Springfield</city> 
    <state>ST</state> 
    <postalcode>12345</postalcode> 
    <eaddress/> 
    <phone/> 
    <fax/> 
</Table1> 

我通過查看每個公司A項,並相應設置的innerText循環。我使用下面的代碼內的文本插入到符合條件的元素:

XmlDocument dom = new XmlDocument(); 
dom.LoadXml(xmlString); 

XmlNodeList elemList = dom.GetElementByTagName("Table1"); 
for(int i = 0; i < elemList.Count; i++) 
{ 
    if(dom.GetElementsByTagName("buyername").Item(i).InnerText.Contains("CompanyA") 
    { 
     dom.GetElementsByTagName("address1").Item(i).InnerText = "SomeInfo"; 
    } 
} 

使用上述代碼,地址1的將由「SomeInfo」被替換的值(123辛普森博士)。我想將「SomeInfo」插入到address2元素中,但是當我嘗試使用時:

dom.GetElementsByTagName("address2").Item(i).InnerText = "SomeInfo"; 

我得到一個錯誤。我可以在任何已有值的元素中插入innertext,但當元素爲空時我不能(如<address2/>)。思考?

回答

3

使用LINQ2XML。它是一個完整的更換到其他XML API的像骯髒的老白癡XmlDocument

XElement doc=XElement.Load("yourXml.xml"); 

foreach(var elm in doc.Descendants("Table1")) 
{ 
if(elm.Element("buyername").Value=="CompanyA") 
elm.Element("address2").Value="SomeInfo"; 
} 
doc.Save("yourXml.xml"); 
+0

開溝骯髒的老白癡爲我工作。謝謝! – user1750293

0

檢查的地址2 XML標記是空的。 如果是,請轉到其父項並移除標籤,然後再添加具有相同標籤的值。 如果否,則將內部文本分配給地址2。

讓我知道你是否需要該代碼。

0

使用SetElementValue方法在LINQ to XML:

XDocument doc = XDocument.Load(FilePath); //replace with xml file path 
IEnumerable<XElement> buyersList = doc.Descendants("Table1"); //get the table node. 
var ele = (from buyer in buyersList 
      where buyer.Element("buyername").Value == "CompanyA" 
      select buyer).SingleOrDefault(); 
ele.SetElementValue("address1", "SomeInfo"); 
ele.SetElementValue("address2", "SomeInfo"); 
doc.Save(FilePath); 

DEMOhttp://ideone.com/Cf7YI

+0

歡呼... linq .... – Anirudha