Tag: xelement

从XElement中删除属性

我试图从xml文档中删除一些属性。 这是我尝试过的: private void RemoveEmptyNamespace(XElement element) { foreach (XElement el in element.Elements()) { if (el.Attribute(“xmlns”) != null && el.Attribute(“xmlns”).Value == string.Empty) el.Attribute(“xmlns”).Remove(); if (el.HasElements) RemoveEmptyNamespace(el); } } 但它不起作用。 当我在方法内部调试时,属性被删除,但是当方法完全执行时,没有保存任何更改。 该文件是一样的。 我想这是因为foreach循环,但我没有看到其他循环方式。 任何建议表示赞赏。 编辑:这是我正在使用的整个代码: var file = new FileStream(destinationPath, FileMode.Open); var doc = new XDocument(); doc = XDocument.Load(savedFile); RemoveEmptyNamespace(doc.Root);//method above file.SetLength(0); doc.Save(file); file.Close(); 编辑2:现在我试图通过逐行和替换字符串来实现相同的目标。 什么都没发生! 该文件仍然是相同的。 […]

使用XElement保存XML文件时,文件中的对齐也会发生变化,如何避免?

我在用 XElement root = XElement.Load(filepath); 加载XML文件,然后找到我需要的东西。 IEnumerable commands = from command in MyCommands where (string) command.Attribute(“Number”) == Number select command; foreach (XElement command in commands) { command.SetAttributeValue(“Group”, GroupFound); } 完成更改后,我使用以下代码保存文件。 root.Save(filepath); 保存文件时,XML文件中的所有行都会受到影响。 默认情况下,Visual Studio会对齐所有行,但我需要保存原始文件格式。 除了Group属性值之外,我无法更改文档的任何部分。 command.SetAttributeValue(“Group”) attributes.

如果:XElement存在,否则创建新的

我的XML文件: 0 0 首先,我需要检查xml .element(“player”).attribute(“name”)是否存在用户名“Tardis”。 如果没有,我需要创建它,杀戮和死亡为零。 如果确实如此,我需要阅读杀戮和死亡并将它们设置为变量。 我一直在使用XElement尝试这样做..谢谢! 用于编写XML的代码: public static string username = “Tardis”; public static int kills = 0; public static int deaths = 0; …….. XElement Players = new XElement( “SimpleKD”, new XElement(“player”, new XAttribute(“name”, username), new XElement(“kills”, kills), new XElement(“deaths”, deaths)));

将单个XElement转换为对象

我有一个XElement看起来像这样: 然后我有一个看起来像这样的课: public class ProductAttribute { public string Flag { get; set; } public string Sect { get; set; } public string Header { get; set; } public string Body { get; set; } public string Extrainfo { get; set; } } 如何将此XElement转换为ProductAttribute对象?

在将此XElement添加到匿名对象之前,如何检查此XElement是否为空?

我正在从XML文件填充匿名对象。 到现在为止, commentary.Elements(“Commentator”) 总是有一个值,所以我从来没有检查过null。 我不得不删除它,现在它在尝试读取该行时失败了。 我正在查看代码,但我不知道要改变什么,因为它被选择为匿名对象的属性。 var genericOfflineFactsheet = new { Commentary = (from commentary in doc.Elements(“Commentary”) select new { CommentaryPage = (string)commentary.Attribute(“page”), BusinessName = (string)commentary.Attribute(“businessName”), Commentator = (from commentator in commentary.Elements(“Commentator”) select new CommentatorPanel // ASP.NET UserControl { CommentatorName = (string)commentator.Attribute(“name”), CommentatorTitle = (string)commentator.Attribute(“title”), CommentatorCompany = (string)commentator.Attribute(“company”) }).FirstOrDefault() }).FirstOrDefault() 问题是,我无法完全删除该行,因为有时候commentary.Elements(“Commentator”) 确实有一个值。 我确定此问题已经处理过,但我看不清楚该做什么。 有任何想法吗?

将XML部分反序列化为Object

我有一些XML,我将其反序列化为业务对象。 我正在使用XmlSerializer.Deserialize来执行此操作。 但是,我希望XML中包含的一个XmlElement保留一个XElement。 它不能直接完成(使用XmlElementAttribute),因为XElement不是Serializable。 我还试图将该元素序列化为一个字符串(两步尝试获取一个XElement),但失败并出现错误: 意外的节点类型元素。 readelementstring方法只能在具有简单或空内容的元素上调用 知道如何做到这一点? 这是一个xml的例子和我想要的结果对象: … 宾语: public class Person { [XmlAttribute(“Name”)] public string Name {get; set;} ????? public XElement Hobbies {get; set;} [XmlElement(“HomeAddress”)] public Address HomeAddress {get; set;} } 尝试不起作用: [XmlElement(“Hobbies”)] public XElement Hobbies {get; set;} [XmlElement(“Hobbies”)] public string Hobbies {get; set;}

Linq-to-XML XElement.Remove()会留下不需要的空格

我有一个从字节数组创建的XDocument(通过tcp / ip接收)。 然后我搜索特定的xml节点(XElements),并在通过调用XElement.Remove()从Xdocument中检索值’pop’之后。 在我的所有解析完成后,我希望能够记录我没有解析的xml(XDocument中剩余的xml)。 问题是在调用XElement.Remove()时会留下额外的空格。 我想知道删除这些额外空格的最佳方法,同时保留剩余xml中的其余格式。 示例/示例代码 如果我通过套接字收到以下xml: Gambardella, Matthew XML Developer’s Guide Computer 44.95 2000-10-01 An in-depth look at creating applications with XML. 我使用以下代码来解析此xml并删除一些XElements: private void socket_messageReceived(object sender, MessageReceivedEventArgs e) { XDocument xDoc; try { using (MemoryStream xmlStream = new MemoryStream(e.XmlAsBytes)) using (XmlTextReader reader = new XmlTextReader(xmlStream)) { xDoc = XDocument.Load(reader); } XElement […]

XElement和List

我有一个具有以下属性的类: public class Author { public string FirstName { get; set; } public string LastName { get; set; } } 接下来,我有一个像这样的作者列表: List authors = new List (); authors.add( new Author { FirstName = “Steven”, LastName = “King” }); authors.add( new Author { FirstName = “Homer”, LastName = “” }); 现在,我正在尝试使用Linq to XML来生成表示我的作者列表的XML。 new XElement(“Authors”, new […]

将XElement转换为XmlNode

我知道没有直接的方法,但仍然..我们可以将XElement元素转换为XmlNode 。 InnerText和InnerXml等选项是特定InnerXml XmlNode 。 所以,如果我想使用这些选项,可以做些什么来将XElement转换为XmlNode ,反之亦然。

将xml字符串传递给System.Xml.Linq.XElement时,避免使用尖括号的xml转义

我从string GetXmlString()得到一个字符串; 我无法改变。 我必须将它附加到new XElement (“parent” , … );的xml new XElement (“parent” , … ); ,到…区域。 我得到的这个字符串具有以下格式。 … 我想要的最终结果是这样的 … 当我只是传递字符串作为XElement(“root”, GetXmlString()) <和>被编码为< 和&gt 当我尝试XElement.Parse(GetXmlString())或XDocument.Parse(GetXmlString())我得到了多个根元素exception。 如何在不转移括号的情况下获得所需的输出? 我错过了什么?