2012-10-16 11 views
7

Mam xmldocument, że ładuję xml w to.Jak wstawić tekst wewnętrzny do pustego elementu xml?

xml wygląda następująco:

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

mam zapętlenie poprzez patrząc na każdego wpisu Companyâ i ustawienie innerText odpowiednio. Używam następujący kod do wstawienia tekstu wewnętrzny na elementy, które spełniają kryteria:

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

Stosując powyższy kod, wartość Address1 (123 Simpsons doktora) zostanie zastąpiony przez „SomeInfo”. Chciałbym zamiast tego wstawić "SomeInfo" do elementu address2, ale gdy spróbuję użyć:

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

Wystąpił błąd. Jestem w stanie wstawić innertext do dowolnego elementu, który ma już wartość, ale nie mogę, gdy element jest pusty (na przykład <address2/>). Myśli?

Odpowiedz

3

Zastosowanie LINQ2XML .To jest całkowite zastąpienie innym interfejsu API XML jest jak brudny stary idiota 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

wodowania brudny stary idiota pracował dla mnie. Dzięki! – user1750293

0

Sprawdź, czy tag Address2 xml jest pusty. Jeśli tak, przejdź do jego obiektu nadrzędnego i usuń tag, a następnie ponownie dodaj ten sam znacznik z wartością. Jeśli nie, przypisz wewnętrzny tekst do adresu2.

daj mi znać, jeśli potrzebujesz kodu.

0

Użyj metody SetElementValue w LINQ do 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

okrzyki na linq .... – Anirudha