首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XElement更新XElement而不使用XDocument

使用XElement更新XElement而不使用XDocument
EN

Stack Overflow用户
提问于 2016-05-24 14:35:32
回答 2查看 322关注 0票数 0

以下是我的xml:

代码语言:javascript
复制
<settings>
  <Element Name="a" Attribute="b" />
  <Element Name="b" Attribute="c" />
</settings>

这是我的密码:

代码语言:javascript
复制
const string SettingsFileName = "settings.xml";
XmlDocument xmlDocument = new XmlDocument();
const string RootNode = "settings";
const string elementName = "Element";
const string attributeName = "Name";
const string attributeValue = "b";

xmlDocument.Load(SettingsFileName);
XElement xElement = XElement.Load(new XmlNodeReader(xmlDocument));

var entry = from element in xElement.Elements(elementName)
   where (string)element.Attribute(attributeName) == attributeValue
   select element;

string[] values = { "Attribute", "d" };

xElement = entry.First<XElement>();

for (int i = 0; i < values.Length; i++)
{
    string name = values[i++];
    string value = "";
    if (i < values.Length)
        value = values[i];
    xElement.Attribute(name).Value=value;
}

我想使用xmlDocument更新XElement,最好不用XDocument。我好像错过了一步,因为这做不到:

代码语言:javascript
复制
xmlDocument.Save(SettingsFileName);

这有可能吗?如果有,怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-24 15:10:44

弄明白了。以下是解决办法:

代码语言:javascript
复制
const string SettingsFileName = "settings.xml";
XmlDocument xmlDocument = new XmlDocument();
const string RootNode = "settings";
const string elementName = "Element";
const string attributeName = "Name";
const string attributeValue = "b";

xmlDocument.Load(SettingsFileName);
XElement xElement = XElement.Load(new XmlNodeReader(xmlDocument));

var entry = from element in xElement.Elements(elementName)
   where (string)element.Attribute(attributeName) == attributeValue
   select element;

string[] values = { "Attribute", "d" };

XElement xElement0 = entry.First<XElement>();

for (int i = 0; i < values.Length; i++)
{
    string name = values[i++];
    string value = "";
    if (i < values.Length)
        value = values[i];
    xElement0.Attribute(name).Value=value;
}
xmlDocument.LoadXml(xElement.ToString());
xmlDocument.Save(SettingsFileName);
票数 0
EN

Stack Overflow用户

发布于 2016-05-24 15:32:08

我不是真的跟着“为什么”在这里。你做的事看起来很疯狂。只要坚持使用XDocument

代码语言:javascript
复制
var doc = XDocument.Load(SettingsFileName);

var attribute = doc
    .Descendants("Element")
    .Attributes("Attribute")
    .Single(x => x.Value == "b");

attribute.Value = "d";

doc.Save(SettingsFileName);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37416678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档