【问题标题】:LINQ Xelement Returns null when child node exist当子节点存在时,LINQ Xelement 返回 null
【发布时间】:2014-12-02 11:14:26
【问题描述】:

我有一个这样的 XML 文件,我想读取 ID、短名称、名称节点值。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<AccountingUnitList xmlns="http://www.google.com">
<AccountingUnit>
<ID>17406</ID> 
<ShortName>test</ShortName> 
<Name>test</Name> 
</AccountingUnit>
<AccountingUnit>
<ID>18006</ID> 
<ShortName>ANOTHERtest</ShortName> 
<Name>Anothertest</Name> 
</AccountingUnit>
<AccountingUnit>
<ID>18046</ID> 
<ShortName>RKU</ShortName>
<Name>hospital</Name> 
</AccountingUnit>
<AccountingUnit>
<ID>18047</ID> 
<ShortName>MNU</ShortName> 
<Name>MNU</Name> 
</AccountingUnit>
</AccountingUnitList>

递归读取 Node 元素的最佳方法是什么?

这就是我尝试读取节点值的方式:

var accountingunit = ( 
                from e in XDocument.Parse(textresult).Root.Elements("AccountingUnit")
                select new node
                {
                     idvalue = (string)e.Element("ID"),
                     shortname =(string)e.Element("ShortName"),
                     name = (string)e.Element("Name"),

                });

            foreach(var unit in accountingunit)
            {
               Console.WriteLine("ID"+ unit.idvalue + unit.name + unit.shortname);
            }

这里是节点构造函数:

public class node
{
    public string idvalue { get; set; }
    public string shortname { get; set; }
    public string name { get; set; }
}

【问题讨论】:

标签: c# xml linq-to-xml


【解决方案1】:

您的文档中有一个 xml 命名空间。AccountingUnitList 的所有子元素都继承了该命名空间,因此您需要通过元素名称来指定它:

XNamespace ns = "http://www.google.com";

var accountingunit = ( 
            from e in XDocument.Parse(textresult).Elements(ns + "AccountingUnit")
            select new node
            {
                 idvalue = (string)e.Element(ns + "ID"),
                 shortname =(string)e.Element(ns + "ShortName"),
                 name = (string)e.Element(ns + "Name"),

            });

【讨论】:

  • @user1514428 尝试删除.Root。由于您使用的是XElement.Parse,root 已经是AccountingUnitList
  • @user1514428 我好像错过了这里的命名空间:.Elements(ns + "AccountingUnit")再试一次
  • 非常感谢它的工作,但我有一个问题。实际上,xml 是所有 Accountingunit 的 web 服务请求的结果,但是如果我请求一个特定的 accountingunit id,则 XML 就像这样 google.com"> 10000TEST KH 01ORBIS TEST-Krankenhaus 011 怎么办?。
  • 如果 xml 是这样的 ; 10000TEST KH 01ORBIS TEST-Krankenhaus 011 我应该在.Elements 中使用什么( ns + ?) 。谢谢。
  • @user1514428 您的问题似乎需要一个新问题,请仅使用 cmets 询问更多详细信息。另外,如果这个问题对你有帮助,请用绿色标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2013-01-19
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多