2012-10-16 30 views
7

Tôi có một tài liệu xmldocument mà tôi đang tải xml vào.Làm cách nào để chèn văn bản bên trong vào phần tử xml trống?

Các xml trông như thế này:

<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> 

Tôi Looping qua nhìn vào mỗi mục companyà và thiết innerText cho phù hợp. Tôi đang sử dụng đoạn mã sau để chèn văn bản bên trong vào các yếu tố đáp ứng được các tiêu chí:

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"; 
    } 
} 

Sử dụng đoạn mã trên, giá trị của address1 (123 Simpsons TS) sẽ được thay thế bằng "SomeInfo". Thay vào đó, tôi muốn chèn "SomeInfo" vào phần tử address2 nhưng khi tôi thử sử dụng:

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

Tôi gặp lỗi. Tôi có thể chèn innertext vào bất kỳ phần tử nào đã có giá trị nhưng tôi không thể khi phần tử trống (chẳng hạn như <address2/>). Suy nghĩ?

Trả lời

3

Sử dụng LINQ2XML Nó là một sự thay thế hoàn toàn cho api XML khác như bẩn cũ ngốc 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

đã bỏ rơi thằng ngốc cũ bẩn làm việc cho tôi. Cảm ơn! – user1750293

0

Kiểm tra xem thẻ address2 xml trống. Nếu có, hãy chuyển đến cấp độ gốc và xóa thẻ, sau đó lại thêm cùng một thẻ với giá trị. Nếu không, hãy gán văn bản bên trong cho địa chỉ2.

cho tôi biết nếu bạn cần mã.

0

Sử dụng phương pháp SetElementValue trong 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); 

DEMO: http://ideone.com/Cf7YI

+0

cổ vũ cho linq .... – Anirudha

Các vấn đề liên quan