jjzjj

C# LINQ to XML : how to join Xml Data

coder 2024-06-28 原文

给定两个像这样的 XML 文件:

<Customers>
  <Customer CustomerID="alc">Alice</Customer>
</Customer>

<Orders>
  <Order OrderID="001" CID="alc">apple</Order>
</Orders>

现在我需要连接这两个 XML 文件并使用内部连接创建一个新文件:

<Result>
  <Join>
     <Customer CustomerID="alc">Alice</Customer>
     <Order OrderID="001" CID="alc">apple</Order>
  </Join>
</Result>

我有这个问题:

var result = new XElement("Result",
     from customer in XElement.Load("Customers.xml").Elements("Customer")
        join order in XElement.Load("Orders.xml").Elements("Order")
        on
            (string)customer.Attribute("CustomerID")
        equals
            (string)order.Attribute("CID")
        select new XElement("Join",
               new XElement("Customer", (string)customer.Element("Customer"),
               new XAttribute("CustomerID", (string)customer.Attribute("CustomerID"))),

               new XElement("Order", (string)order.Element("Order"),
               new XAttribute("OrderID", (string)order.Attribute("OrderID")),
               new XAttribute("CID", (string)order.Attribute("CID")))));
result.Save("result.xml");

用这个我无法获得数据“Alice”和“apple”。结果是这样的:

<Result>
  <Join>
    <Customer CustomerID="alc" />
    <Order OrderID="001" CID="alc" />
  </Join>
</Result>

我想也许 (string)customer.Element("Customer")(string)order.Element("Order") 有一些问题,我不知道如何修改这些。

最佳答案

你可以 cast an element to a string获取其文本值:

    select new XElement("Join",
           new XElement("Customer", (string)customer,
           new XAttribute("CustomerID", (string)customer.Attribute("CustomerID"))),

           new XElement("Order", (string)order,
           new XAttribute("OrderID", (string)order.Attribute("OrderID")),
           new XAttribute("CID", (string)order.Attribute("CID")))));

关于C# LINQ to XML : how to join Xml Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890713/

有关C# LINQ to XML : how to join Xml Data的更多相关文章

  1. c# - LinqToXml 未按预期处理可空元素 - 2

    根据W3C标准,如果您有一个值为nil的nillable元素,您应该像这样格式化它:但是如果你使用这个LinqToXml语句...element.Add(newXElement(ns+"myNillableElement",null);...生成的XML是......这是无效的。不仅根据W3C无效,根据Microsoft自己的XML/XSD验证器也无效。因此,下次您验证XML时,您会收到错误。我是否缺少一些可以打开正确处理可空元素的开关?谢谢。 最佳答案 LINQtoXML大多数情况下不是模式感知的-它允许您验证树,但它不会从中派生

  2. wpf - 带有 XML 模型和 LinqToXml 的 MVVM? - 2

    我一直在阅读MVVM模式,我想在一个相对较小的WPF项目上尝试一下。该应用程序将是单用户的。输入和输出数据都将存储在“关系”XML文件中。带有Keys和KeyRefs的模式(XSD文件)用于验证文件。我也开始接触Linq和LinqToXml,并且我编写了一些非常复杂的查询,这些查询确实有效(小胜利:))。现在,我试图将它们放在一起,但我发现我对模型和View模型中应该包含的内容有点困惑。以下是到目前为止我一直在考虑的选项:我是否应该将模型视为XML文件本身并将所有LinqToXml查询放在ViewModel中?也就是说,连一个叫Model的类都不写?我是否应该编写一个模型,它只是XML

  3. c# - LinqToXml 还是 Xml? - 2

    我正在尝试处理xml,但我对使用Xml命名空间类感到厌烦。我发现这真的很难。所以我正在尝试对LinqtoXml类做同样的事情,我发现使用LinqtoXml而不是Xml类可以做很多事情。所以我真的很困惑我必须使用哪个。您什么时候以及为什么更喜欢Xml类而不是LinqtoXml类?编辑:当LinqToXml可以使用Xml类时,有什么是不可能的? 最佳答案 自.NETFramework的第一个版本以来,用于操作和处理XML数据的通用方法就可用了。Linq自.NETFramework3.5起可用。如果您的目标是旧版本的.NETFramewo

  4. c# - 使用 LinqToXml 使用过滤器选择唯一的 XElements(按属性) - 2

    我有一个类似于此的XML文档:blablablablabla现在我想使用linq查询获取属于指定类别的所有唯一所有者(我实际上只需要所有者的属性值)。在我的示例中,对cat1的查询将返回一个包含9和14的列表。我该怎么做?Linq语法比Lambda更受欢迎。提前致谢;) 最佳答案 假设片段在itemsElement中:vardistinctOwners=(fromiteminitemsElement.Element("item")whereitemElements.Attribute("cat")==1selectitem.Attr

  5. c# - LinqToXML XElement 到 XmlNode - 2

    你好,在C#中是否有将XElement转换为XmlNode的任何“正确”方法-LinqToXML可以很好地以编程方式构建所需的XML,但SharePointWeb服务需要XmlNode,那么混合和匹配的最佳方法是什么? 最佳答案 使用CreateReader()和类似的XmlDocumentXmlDocumentmyXmlNode=newXmlDocument();using(XmlReaderreader=myXElement.CreateReader()){myXmlNode.Load(reader);}XmlDocument派

随机推荐