使用 linq to xml 搜索 xml 文件并操作属性

问题描述 投票:0回答:1

实际上我正在尝试更改 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”属性的值?

c# xml linq linq-to-xml
1个回答
0
投票

请尝试以下使用 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>
© www.soinside.com 2019 - 2024. All rights reserved.