如何使用 C# 更新 XML 中的节点值
How to update node values in XML using C#
我必须用修改后的值更新原始 XML 文件。下面是我的示例 XML 文件:
<request>
<facility>
<alternateIDs>
<alternateID code="ALT8">11111111</alternateID>
<alternateID code="ALT12">111111111</alternateID>
<alternateID code="ALT">1111111111</alternateID>
<alternateID code="ALT1">11111111</alternateID>
<alternateID code="ALT9">11111111</alternateID>
<alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>
现在我要查找 alternateID code="ALT"
并将其值更改为 00000000
。我的最终文件应如下所示:
<request>
<facility>
<alternateIDs>
<alternateID code="ALT8">11111111</alternateID>
<alternateID code="ALT12">111111111</alternateID>
<alternateID code="ALT">00000000</alternateID>
<alternateID code="ALT1">11111111</alternateID>
<alternateID code="ALT9">11111111</alternateID>
<alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>
如何使用 XElement
和 XAttributes
实现此目的?我不熟悉 XML 和 C#。感谢您的帮助!
试试这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication34
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement alt = doc.Descendants("alternateID").Where(x => (string)x.Attribute("code") == "ALT").FirstOrDefault();
alt.Value = "00000000";
}
}
}
这是一种非 Linq 的方法,但如果您知道如何阅读,Linq 会更简洁。
public static void ReplaceCode()
{
var root = XElement.Load(@"C:\data.xml");
foreach (var e in root.Descendants("alternateID"))
{
if (!e.Attribute("code").Value.Equals("ALT")) continue;
e.Value = "00000000";
break;
}
root.Save(@"C:\data.xml");
}
知道了!
public static void ReplaceCode()
{
var root = new XmlDocument();
root.Load(@"C:\data.xml");
foreach (XmlNode e in root.GetElementsByTagName("alternateID"))
{
if (e.Attributes["code"].Value.Equals("ALT"))
{
e.FirstChild.Value = "00000000"; // FirstChild because the inner node is actually the inner text, yeah XmlNode is weird.
break;
}
}
root.Save(@"C:\data.xml");
}
问我任何关于它的事情,我可以澄清。 :)
我必须用修改后的值更新原始 XML 文件。下面是我的示例 XML 文件:
<request>
<facility>
<alternateIDs>
<alternateID code="ALT8">11111111</alternateID>
<alternateID code="ALT12">111111111</alternateID>
<alternateID code="ALT">1111111111</alternateID>
<alternateID code="ALT1">11111111</alternateID>
<alternateID code="ALT9">11111111</alternateID>
<alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>
现在我要查找 alternateID code="ALT"
并将其值更改为 00000000
。我的最终文件应如下所示:
<request>
<facility>
<alternateIDs>
<alternateID code="ALT8">11111111</alternateID>
<alternateID code="ALT12">111111111</alternateID>
<alternateID code="ALT">00000000</alternateID>
<alternateID code="ALT1">11111111</alternateID>
<alternateID code="ALT9">11111111</alternateID>
<alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>
如何使用 XElement
和 XAttributes
实现此目的?我不熟悉 XML 和 C#。感谢您的帮助!
试试这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication34
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement alt = doc.Descendants("alternateID").Where(x => (string)x.Attribute("code") == "ALT").FirstOrDefault();
alt.Value = "00000000";
}
}
}
这是一种非 Linq 的方法,但如果您知道如何阅读,Linq 会更简洁。
public static void ReplaceCode()
{
var root = XElement.Load(@"C:\data.xml");
foreach (var e in root.Descendants("alternateID"))
{
if (!e.Attribute("code").Value.Equals("ALT")) continue;
e.Value = "00000000";
break;
}
root.Save(@"C:\data.xml");
}
知道了!
public static void ReplaceCode()
{
var root = new XmlDocument();
root.Load(@"C:\data.xml");
foreach (XmlNode e in root.GetElementsByTagName("alternateID"))
{
if (e.Attributes["code"].Value.Equals("ALT"))
{
e.FirstChild.Value = "00000000"; // FirstChild because the inner node is actually the inner text, yeah XmlNode is weird.
break;
}
}
root.Save(@"C:\data.xml");
}
问我任何关于它的事情,我可以澄清。 :)