如何向空的XML元素插入内部文本?

7

我有一个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>

我正在循环遍历每个CompanyA条目,并相应地设置其inner文本。我使用以下代码将内部文本插入符合条件的元素:

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 Simpsons Dr.)的值将被替换为“SomeInfo”。我想将“SomeInfo”插入到地址2元素中,但是当我尝试使用以下代码时:
dom.GetElementsByTagName("address2").Item(i).InnerText = "SomeInfo";

我遇到了一个错误。我能够向任何已经有值的元素中插入innertext,但是当元素为空时(例如<address2/>),我无法进行操作。您有什么想法吗?

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

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


0

检查address2的xml标签是否为空。 如果是,转到其父级并删除该标签,然后再添加具有值的相同标签。 如果不是,则将内部文本分配给address2。

如果需要代码,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接