7

私はxmlをロードしているxmldocumentを持っています。

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>

CompanyA の各エントリを調べて、それに応じて 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";
   }
}

上記のコードを使用すると、address1(123 Simpsons Dr.) の値が「SomeInfo」に置き換えられます。代わりに「SomeInfo」をaddress2要素に挿入したいのですが、使用しようとすると:

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

エラーが発生します。既に値を持っている任意の要素に innertext を挿入できますが、要素が空の場合 ( など<address2/>) は挿入できません。考え?

4

3 に答える 3

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");
于 2012-10-16T15:05:19.803 に答える
0

address2 xml タグが空かどうかを確認します。yes の場合は、その親に移動してタグを削除し、同じタグに値を追加します。no の場合、内部テキストを address2 に割り当てます。

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

于 2012-10-16T15:07:57.693 に答える
0

LINQ to XML で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);

デモ: http://ideone.com/Cf7YI

于 2012-10-16T15:41:48.877 に答える