Tag: linq to xml

在XDocument中递归查找节点

我想我忽略了一些简单的东西,但是我很难递归地从XDocument中提取节点。 我有类似这样的XML: 我以为我可以使用所有三个观察节点 foreach (XElement element in Content.Descendants(“observation”)) ExamineObservation(element); 虽然看起来这只适用于观察没有孩子的情况。 我也试过.Ancestors和.DecentantNodes,但没有得到我想要的。 我可以很容易地编写一个递归方法来获取我需要的东西,但是如果有的话,我宁愿使用现有的方法,特别是因为我将在几个项目中使用XML。 我错过了一些明显的东西吗 请注意,任何说观察的节点,我都需要从中获取代码和值,因此在下面的示例中我将需要处理三个观察节点。 观察节点的嵌套和数量是任意的。 谢谢你的帮助。 附录 在我看来,我可能没有提供有关XML的足够信息。 我不认为标签会有所作为,但我想我应该包括它们以防万一。 下面是我试图解析的实际消息的前几行。 为了隐私,我确实用“…”替换了一些文本。 update

XNode.DeepEquals意外返回false

使用XNode.DeepEquals()来比较xml元素,它意外地在两个我认为应该等效的xml文档上返回false 。 例 var xmlFromString = XDocument.Parse(“”); var xmlDirect = new XDocument(new XElement( XNamespace.Get(“someNamespace”) + “someXml”)); Console.WriteLine(xmlFromString.ToString()); Console.WriteLine(xmlDirect.ToString()); Console.WriteLine(XNode.DeepEquals(xmlFromString, xmlDirect)); Console.WriteLine(xmlFromString.ToString() == xmlDirect.ToString()); 产量 False True 字符串被认为是相同的,但XML树不是。 为什么?

如何在XDocument元素的名称中使用’:’字符?

我正在使用XDocument在代码下面创建一个RSS: var document = new XDocument( new XDeclaration(“1.0”, “utf-8”, null), new XElement(“rss”, new XElement(“channel”, new XElement(“title”, “test”), new XElement(“dc:creator”, “test”), 执行此代码期间发生的exception。 ‘:’字符,hex值0x3A,不能包含在名称中。 我如何使用:元素名称中的字符?

如何获得XDocument的独立副本?

我正在尝试创建一个新的XDocument,如下所示: var xmlString = _documentDictionary[documentKey].ToString(SaveOptions.DisableFormatting); XDocument xml = XDocument.Parse(xmlString); 我现在有xml ,虽然它是一个独立的文档实例,因为我从原始文档中提取了字符串并从中创建了一个新的字符串。 但是当我修改xml然后检查_documentDictionary[documentKey]我可以看到原始文档也被修改了。 如何从我现有的系列中获取新的独立文档? 注意: 我试过这些但它不起作用: var xmlString = _documentDictionary[documentKey].ToString(SaveOptions.DisableFormatting); var copyDoc = new XDocument(xmlString); 和 var copyDoc = new XDocument(_documentDictionary[documentKey]);

将单个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对象?

错误: – XmlReader状态应该是XDocument.Load上的Interactive

我收到以下错误: – System.InvalidOperationException:XmlReader状态应为Interactive。 System.Xml.Linq.XDocument.Load(XmlReader reader,LoadOptions选项)中的System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r,LoadOptions o) 在以下代码中。 有谁能指出我在这里做错了什么? static XDocument GetContentAsXDocument(string xmlData) { XmlDocument xmlDocument = new XmlDocument(); if (!string.IsNullOrEmpty(xmlData)) { xmlDocument.LoadXml(xmlData); return xmlDocument.ToXDocument(); } else { return new XDocument(); } } /// /// Converts XMLDocument to XDocument /// /// /// public static XDocument ToXDocument( this XmlDocument xmlDocument ) { using( var nodeReader = […]

合并xml文档

我遇到的关于合并XML文档的所有解决方案都达不到我想要的。 让我解释: XML文档1: XML文档2: 进入这样的最终文档: 文档内容相似,但可以具有任意数量的子节点。 我也想消除重复。 我认为重复是具有相同属性的元素(基于属性名称和值)。 有谁见过这个实现的工作示例? 我可以想象如何使用一些循环和一些递归来编写它,但对我来说,这似乎不是实现我想要的最佳方式:) 欢呼并提前谢谢! *编辑* 既然共识是循环和递归是必须的,那么最优雅和有效的方法是什么呢? 我想这个问题的另一个基本问题是在迭代时比较节点的最佳方法是什么?

此操作将创建结构不正确的文档

我是XML新手并尝试了以下但我得到了一个例外。 有人能帮我吗? 例外是This operation would create an incorrectly structured document 我的代码: string strPath = Server.MapPath(“sample.xml”); XDocument doc; if (!System.IO.File.Exists(strPath)) { doc = new XDocument( new XElement(“Employees”, new XElement(“Employee”, new XAttribute(“id”, 1), new XElement(“EmpName”, “XYZ”))), new XElement(“Departments”, new XElement(“Department”, new XAttribute(“id”, 1), new XElement(“DeptName”, “CS”)))); doc.Save(strPath); }

如何将XElement添加到文档中,避免出现“结构不正确的文档”错误?

// Remove element with ID of 1 var userIds = from user in document.Descendants(“Id”) where user.Value == “1” select user; userIds.Remove(); SaveAndDisplay(document); // Add element back var newElement = new XElement(“Id”, “0”, new XElement(“Balance”, “3000”)); document.Add(newElement); SaveAndDisplay(document); add元素后块是问题所在。 当它到达添加时它指出: 此操作将创建结构不正确的文档。 我犯的是什么愚蠢的错误? 编辑: 是的,我正在阅读XDocument ,而不是XElement 。 关于何时支持其中一个的任何建议?

在不考虑xml namesapce的情况下,针对xsdvalidationxml

我正在使用以下代码来validation我的xml对xsd。 var isXmlValid = true; var vinListMessage = “”; var xsdFilePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, “schema.xsd”); var schemas = new XmlSchemaSet(); schemas.Add(null, xsdFilePath); var xmlDocument = XDocument.Parse(vinListMessage); xmlDocument.Validate(schemas, (o, e) => { isXmlValid = false; }); Console.WriteLine(isXmlValid); 请注意上面xml中的xmlns,其urn:test/properties/v1.0 。 现在在我的xsd中,我将targetnamespace作为targetNamespace=”urn:testnew/properties/v1.0″ ,这与xml中的不同。 现在无论我尝试针对xsdvalidationxml,它总是返回true。 但如果我匹配名称空间,那么它的工作正常。 我想避免依赖命名空间。 有什么建议?