C# 如何更新特定的 XElement?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1174792/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I update a specific XElement?
提问by paradisontheitroad
What is the best way to update an XElement (update the value of itemNumber of element Pen) in this XML?
在此 XML 中更新 XElement(更新元素 Pen 的 itemNumber 的值)的最佳方法是什么?
<?xml version="1.0" encoding="utf-8"?>
<MyStore>
<Category>
<itemName>Pen</itemName>
<itemNumber>12</itemNumber>
</Category>
<Category>
<itemName>Paper</itemName>
<itemNumber>23</itemNumber>
</Category>
</MyStore>
采纳答案by Pavel Minaev
XDocument doc;
...
XElement penItemValue = doc
.Elements("MyStore")
.Elements("Category")
.Elements("itemName")
.Single(itemName => itemName.Value == "Pen")
.Parent
.Element("itemValue");
penItemValue.Value = "123";
回答by Andrew Cox
I would use Xpath to find the element you were looking for, then manipulate it directly.
我会使用 Xpath 来查找您要查找的元素,然后直接操作它。
For the XPath something like //Category[itemName='Pen']/itemNumber
would find the element
for more on Xpath see
对于 XPath 类似的东西//Category[itemName='Pen']/itemNumber
会在 Xpath 上找到更多元素
,请参阅
The following (very basic) snippet works for me in mono
以下(非常基本的)片段在单声道中对我有用
using System.Xml;
namespace test
{
class myclass
{
public static void Main(string[] argv)
{
XmlTextReader reader = new XmlTextReader(argv[0]);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlNode myNode;
XmlElement root = doc.DocumentElement;
myNode = root.SelectSingleNode("//Category[itemName='Pen']/itemNumber");
myNode.InnerText = "18";
doc.Save(argv[1]);
}
}
}
回答by womp
You could find it and update it using LinqToXml:
您可以使用 LinqToXml 找到并更新它:
XElement root = XElement.Load("myXml.xml");
var penCategory = from category in root.Descendants("Category")
where category.Element("itemName") != null
&& category.Element("itemName").Value == "Pen"
select category;
penCategory.Element("itemName").Value = updatedValue;
回答by steamer25
Using XPath (which will be familiar to most XML devs):
使用 XPath(大多数 XML 开发人员都熟悉):
var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<MyStore>
<Category>
<itemName>Pen</itemName>
<itemNumber>12</itemNumber>
</Category>
<Category>
<itemName>Paper</itemName>
<itemNumber>23</itemNumber>
</Category>
</MyStore>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var nav = doc.CreateNavigator();
var iter = nav.Select("/MyStore/Category[itemName='Pen']/itemNumber");
iter.MoveNext();
iter.Current.SetValue("42");