2012-10-16 8 views
7

私はxmlを読み込んでいるxmldocumentを持っています。空の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(123シンプソンズ博士)の値が「SomeInfo」に置き換えられます使用します。私は代わりに "SomeInfo"をaddress2要素に挿入したいと思いますが、使用しようとしたときに:

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

私はエラーになります。私は既に値を持っている任意の要素にinnertextを挿入することができますが、要素が空のときにはできません(<address2/>など)。思考?

答えて

3

使用LINQ2XMLアドレス2 XMLタグが空の場合.ITは汚い古い馬鹿のような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

チェック他に完全に置き換えます。 「はい」の場合は、その親に移動してタグを削除し、再び同じタグに値を追加します。 いいえの場合は、内部テキストをaddress2に割り当てます。

コードが必要な場合はお知らせください。

0

は、XMLにLINQでSetElementValueメソッドを使用します。

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

関連する問題