实际上我正在尝试更改 xml 文件中一个元素的属性。我仍然无法选择 xml 文件中的元素。我的 xml 文件看起来像这样(缩短):
<?xml version="1.0" encoding="utf-8"?>
<settingData xmlns="head.de">
<version>4.9.2.1</version>
<setting name="strEdmServiceUrl" value="" />
</settingData>
当我尝试使用
xelDllSettings.Element( "settingData" )
选择元素时,引发的错误是空引用。我已经检查过 xelDllSettings 实际上是我的 xml 文件。
到目前为止,我操作 xml 文件的代码如下所示:
String strEdmServiceUrl = "Text to add in value attribute";
XElement xelDllSettings = XElement.Load( CORRECT_FILEPATH );
xelDllSettings.Element( "settingData" ).Elements( "setting" ).FirstOrDefault( att => ( String )att.Attribute( "value" ) == "strEdmServiceUrl" ).SetAttributeValue( "value", strEdmServiceUrl );
xelDllSettings.Save( CORRECT_FILEPATH, SaveOptions.None );
如何访问正确的元素(通过“name”属性选择)并更改“value”属性的值?
请尝试以下使用 LINQ to XML API 的解决方案。自 2007 年以来,它在 .Net Framework 中可用。
c#
void Main()
{
const string FILENAME = @"e:\Temp\DevEV.xml";
const string NEW_FILENAME = @"e:\Temp\DevEV_new.xml";
XDocument xdoc = XDocument.Load(FILENAME);
XNamespace ns = xdoc.Root.GetDefaultNamespace();
var attr = xdoc.Descendants(ns + "setting")?
.Where(d => (string)d.Attribute("name")?.Value == "strEdmServiceUrl")
.FirstOrDefault()?.Attribute("value");
attr.Value = "999";
Console.WriteLine(xdoc);
xdoc.Save(NEW_FILENAME);
}
输出
<settingData xmlns="head.de">
<version>4.9.2.1</version>
<setting name="strEdmServiceUrl" value="999" />
</settingData>