2012-10-16 11 views
7

Ho un xmldocument in cui sto caricando xml.Come inserisco il testo interno nell'elemento xml vuoto?

L'XML assomiglia a questo:

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

Sto scorrendo guardando ogni voce e l'impostazione CompanyA InnerText di conseguenza. Sto utilizzando il seguente codice per inserire testo interno in elementi che soddisfano i criteri:

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

Utilizzando il codice di cui sopra, il valore di address1 (123 Simpsons Dr.) verrebbe sostituito da "SomeInfo". Vorrei inserire al posto "SomeInfo" nell'elemento address2 ma quando provo utilizzando:

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

ottengo un errore. Sono in grado di inserire testo interiore in qualsiasi elemento che abbia già un valore ma non posso quando l'elemento è vuoto (ad esempio <address2/>). Pensieri?

risposta

3

Usa LINQ2XML .E 'una sostituzione completa per altre API XML di come il vecchio sporco 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

abbandonando il vecchio idiota sporco ha lavorato per me. Grazie! – user1750293

0

Verificare se il tag XML address2 è vuoto. Se sì, vai al suo genitore e rimuovi il tag, quindi aggiungi di nuovo lo stesso tag con il valore. Se no, assegna il testo interno a address2.

fatemi sapere se avete bisogno del codice.

0

utilizzare il metodo SetElementValue in 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

cheers a linq .... – Anirudha

Problemi correlati