Tag: linq to xml

Linq-XML总是那么混乱吗?

var subset = from item in document.Descendants(“Id”) where item.Value == itemId.ToString() select new PurchaseItem() { Id = int.Parse(item.Parent.Element(“Id”).Value), Name = item.Parent.Element(“Name”).Value, Description = item.Parent.Element(“Description”).Value, Price = int.Parse(item.Parent.Element(“Price”).Value) }; XML的结构如下: Id和价格都是整数值。 名称和描述是字符串。 我发现Linq to XML非常适合我用它,这只是一个片段。 但是,另一方面,我感觉它应该或可能更清洁。 在这个片段中,转换似乎是最明显的问题。 任何建议?

如何从XElement中删除特定节点?

我创建了一个带有节点的XElement,它具有如下XML。 我想删除所有“ 规则 ”节点,如果它们包含“ 条件 ”节点。 我创建一个for循环,如下所示,但它不会删除我的节点 foreach (XElement xx in xRelation.Elements()) { if (xx.Element(“Conditions”) != null) { xx.Remove(); } } 样品: 如果它们包含“ 条件 ”节点,如何删除所有“ 规则 ”节点?

XDocument.Save()删除了我的
 实体

我编写了一个工具来修复一些XML文件(即插入一些缺少的属性/值),使用C#和Linq-to-XML。 该工具将现有XML文件加载到XDocument对象中。 然后,它通过节点向下解析以插入缺失的数据。 之后,它调用XDocument.Save()将更改保存到另一个目录。 所有这一切都很好,除了一件事:任何
 XML文件中文本中的实体将替换为换行符。 当然,实体代表一个新行,但我需要在XML中保留实体,因为另一个消费者需要它。 有没有办法保存修改过的XDocument而不会丢失
 实体? 谢谢。

如何在不使用所有子节点中的XNamespace的情况下为子节点创建具有默认命名空间的XElement

我正在尝试使用System.Xml.Linq来创建XHTML文档。 因此,我树中的绝大多数节点都应该使用这个命名空间: http://www.w3.org/1999/xhtml 我可以使用XNamespace轻松地创建作用于此命名空间的XElement节点,如下所示: XNamespace xhtml = “http://www.w3.org/1999/xhtml”; // … new XElement(xhtml + “html”, // … 但是,我不希望在创建HTML节点的所有代码中都提供XNamespace ,并且必须为我创建的每个单独的XElement (和XAttribute )名称添加前缀。 XML文本格式本身考虑了这一要求,并允许使用保留的xmlns属性在后代inheritance的祖先中设置默认命名空间。 我想使用System.Xml.Linq做类似的事情。 这可能吗?

如何将Linq查询结果转换为XML?

Linq到XML领域的新手…… 我有一个带有结果的Linq查询,我想将这些结果转换为XML。 我猜测必须有一个相对简单的方法,但我找不到它…… 谢谢!

LINQ to XML – 如何正确使用XDocument

现在我开始说这确实是一个分配。 然而,我几乎完成了它,直到我遇到了Linq to XML语法。 我有两个类:Track和CD现在作为分配的一部分我创建了一个CD,然后添加了一些轨道。 在搜索了很多完全解释如何从xml到对象的教程之后,我似乎无法使其工作(对象为xml)。 我目前有: //My list of cds List cds = new List(); //Make a new CD and add some tracks to it CD c1 = new CD(“Awake”,”Dream Theater”); Track t1 = new Track(“6:00”, “Dream Theater”, new TimeSpan(00, 05, 31)); Track t2 = new Track(“Caught in a Web”, “Dream Theater”, new TimeSpan(00, […]

C#将根添加到XDocument

我有一个包含XML的字符串,让我们这样说: Cat in hat 12 我想制作一个如下所示的XDocument: Cat in hat 12 我可以使用XDocument doc = XDocument.Parse(xmlString);将xml字符串加载到XDocument中XDocument doc = XDocument.Parse(xmlString); 如何在新根目录下加载文档。 我可以想到用我想要的根创建一个新的XDocument,然后使用for循环将节点添加为子节点,但是有更简单的方法吗?

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 […]

如何使用C#和LINQ在XML内部提取信息?

这是我在StackOverflow上的第一篇文章,所以请耐心等待。 如果我的代码示例有点长,我会提前道歉。 使用C#和LINQ,我试图在更大的XML文件中识别一系列第三级id元素(在本例中为000049)。 每个第三级id都是唯一的,我想要的是基于每个的一系列后代信息。 更具体地说,如果type == A和location type(old) == vault和location type(new) == out ,那么我想选择那个id 。 下面是我正在使用的XML和C#代码。 一般来说我的代码有效。 如下所示,它将返回两次id为000049,这是正确的。 但是,我发现了一个小故障。 如果我删除包含type == A的第一个history块,我的代码仍然会返回两次id为000049,它应该只返回一次。 我知道它为什么会发生,但我无法找到更好的方法来运行查询。 有没有更好的方法来运行我的查询来获得我想要的输出并仍然使用LINQ? 我的XML: 2011 04 22 Friday 15 24 46 0001 customer kit customer kit 000049 2011 04 22 Friday 03 00 02 batch OD vault 0 out 0 0001.kit.000049 2011 04 22 […]

XML解析检查属性是否存在

我已经创建了一个方法来检查XML文件中是否存在属性。 如果它不存在则返回“False”。 它可以工作,但解析文件需要很长时间。 它似乎读取每一行的整个文件。 我错过了什么吗? 我能以某种方式使它更有效吗? public static IEnumerable getXML(string XMLpath) { XDocument xmlDoc = XDocument.Load(“spec.xml”); var specs = from spec in xmlDoc.Descendants(“spec”) select new RowData { number= (string)spec.Attribute(“nbr”), name= (string)spec.Attribute(“name”).Value, code = (string)spec.Attribute(“code”).Value, descr = (string)spec.Attribute(“descr”).Value, countObject = checkXMLcount(spec), return specs; } public static string checkXMLcount(XElement x) { Console.WriteLine(x.Attribute(“nbr”).Value); Console.ReadLine(); try { if (x.Attribute(“mep_count”).Value […]