【问题标题】:How do I insert inner text into empty xml element?如何将内部文本插入空的 xml 元素?
【发布时间】:2012-10-16 14:57:31
【问题描述】:

我有一个要加载 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 条目并相应地设置内部文本。我正在使用以下代码将内部文本插入到符合条件的元素中:

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

我得到一个错误。我可以将内部文本插入到任何已经有值的元素中,但是当元素为空时我不能(例如&lt;address2/&gt;)。想法?

【问题讨论】:

    标签: c# asp.net xml xmldocument


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-20
          • 2012-12-08
          • 1970-01-01
          • 2020-06-30
          • 2014-06-15
          • 2013-07-02
          • 1970-01-01
          相关资源
          最近更新 更多