【问题标题】:LINQ to XML contents of child records子记录的 LINQ to XML 内容
【发布时间】:2010-04-22 14:12:10
【问题描述】:

我有这个 LINQ to XML 查询...

var Records = from Item in XDoc.Root.Elements("Item")
              where (string)Item.Element("ItemNumber") == item.ID.ToString
              select Item;

... 其中 ItemNumber 是 XML 中使用的参考编号(最初由该程序编写,但由“其他人”手动编辑),item.ID 是同一事物的数据库版本。查询执行,我可以很好地测试结果中的条目数...

if (Records.Count() < 1)

...你明白了。我已经确定只有一条记录,(编辑没有删除或复制/倍增该项目)。

每个项目都有几个子字段。我想在将子字段的值传递给数据库更新子系统之前测试它们的值是否合理。 XML 由程序生成,但由用户编辑,所以我需要真正检查返回的内容。所以我尝试了...

if (DB_English.ToString() != Records.Elements("English").ToString())

...DB_English 来自数据库,但是 Records 中的 XML,不包含该字段的内容,它包含...

System.Xml.Linq.Extensions+<GetElements>d__29`1[System.Xml.Linq.XElement]

... 那么,如何在 XML 文件中获取此元素的值?我需要检查 XML 中的字段是否被更改,(此数据文件的手动编辑器可能不是 100% 可靠的)。

【问题讨论】:

    标签: xml linq


    【解决方案1】:
    Records.Elements("English").Value
    

    这将为您提供 XElement 的值。但它只会返回文本。如果值中有 html/xml,那么这将不起作用,您将需要编写扩展方法来获取此值。

    在这种情况下,此链接应该会有所帮助: http://blogs.msdn.com/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx

    【讨论】:

    • 与上述相同类型的错误... .Value 或 .Value()。错误 2“System.Collections.Generic.IEnumerable”不包含“Value”的定义,并且没有扩展方法“Value”接受“System.Collections.Generic.IEnumerable”类型的第一个参数' 可以找到(您是否缺少 using 指令或程序集引用?)
    【解决方案2】:

    我添加了这个...

    XElement X_EnglishE = null;  // This is BLOODY CRAZY
    foreach (XElement i in Records)
        {
            X_EnglishE = i.Element("English");  // There is only one damned record!
        }
    string X_English = X_EnglishE.Value.ToString();
    

    ... 并测试生成的 X_English 字符串。这有效,但似乎很荒谬!必须有更好的方法。

    【讨论】:

      【解决方案3】:

      试试这个

       if (DB_English.ToString() != Records.Elements("English").InnerXML.ToString())
      

      【讨论】:

      • Morning Dan,试过了,编译器抛出了这个... 错误 1 ​​'System.Collections.Generic.IEnumerable' 不包含 'InnerXML' 的定义和找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“InnerXML”(您是否缺少 using 指令或程序集引用?)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多