如何将内部文本插入空的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>
我循环查看每个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辛普森博士)的值将被替换为“SomeInfo”。 我想将“SomeInfo”插入到address2元素中,但是当我尝试使用时:
dom.GetElementsByTagName("address2").Item(i).InnerText = "SomeInfo";
我收到一个错误。 我可以将innertext插入任何已经有值的元素,但当元素为空时(例如<address2/>
),我不行。 思考?
使用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");
检查address2 xml标签是否为空。 如果是,则转到其父项并删除标签,然后再添加具有相同标签的值。 如果否,则将内部文本分配给address2。
让我知道你是否需要这些代码。
使用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
链接地址: http://www.djcxy.com/p/11307.html