【问题标题】:Get reader from Xnode doesn't work从 Xnode 获取阅读器不起作用
【发布时间】:2012-01-17 22:01:02
【问题描述】:

我尝试从 XNode 获取属性我使用以下代码

        XDocument document = XDocument.Load(FilePath);

        var Elements = from p in document.Descendants(modality) select p.Elements("Key_Part");

        //var Attriputess = from p in document.Descendants(modality) select p.Attributes();    
        foreach (var Element in Elements)
        {

            foreach (var node in Element.Nodes())
            {

                XmlReader reader = node.CreateReader();



                string a = reader.GetAttribute("Type"); 


            }



        }

总是相等的 null 像这样的 XML 类型

<ShortcutList Version="8">
  <Doctor>
    <Key_Part >
        <Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1>
        <Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key1>
    </Key_Part>

我想获取 Key1 , Key2 属性和值

【问题讨论】:

    标签: xml c#-3.0 linq-to-xml


    【解决方案1】:

    在开始获取属性之前,您需要确保阅读器位于元素上。但是,除非您有充分的理由这样做,否则您根本不需要 XmlReader 来获取属性值。

    已编辑以添加请求的示例:

    foreach (var a in document.Descendants(modality).Elements("Key_Part").Select(e => e.Attribute("Type").Value)) {
        // the variable a is a string with the attribute value
    }
    

    或者像这样:

    foreach (var attr in document.Descendants(modality).Elements("Key_Part").Attributes("Type")) {
        string a = attr.Value;
    }
    

    【讨论】:

    • 那么如何在没有那个的情况下获取属性,请举个例子
    • 例如使用XElement.Attribute()方法。
    • 很抱歉,你能用xml举例吗,请提供代码,没有Element.Attribute
    • 但是我需要用值和属性填充数据表,这会导致性能问题,
    • 请具体说明。 “它不起作用”并不具体,数据表又是什么?
    【解决方案2】:

    我必须说我已经修复了您在下面得到工作查询之前提供的 XML。所以你没有关闭最后两个标签,你已经关闭了Key2 by &lt;/Key1&gt; 标签什么是错误的 XML。

    尝试以下,这将返回条目列表(每个键一个),其中每个匿名类型的条目具有属性:名称、值、类型

    var keys = xdoc.Descendants("ShortcutList")
                   .Descendants("Doctor")
                   .Descendants("Key_Part")
                   .DescendantNodes()
                   .OfType<XElement>()
                   .Where(d => d.Name.LocalName.Contains("Key"))
                   .Select(e => new {
                                     Value = e.Value, 
                                     Name = e.Attribute("Name").Value, 
                                     Type = e.Attribute("Type").Value
                                    })
                  .ToList();
    

    编辑:固定 XML

    <ShortcutList Version="8">
      <Doctor>
        <Key_Part >
            <Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1>
            <Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key2>
        </Key_Part>
    </Doctor>
    </ShortcutList>
    

    【讨论】:

    • 您修复了 XML 吗?查看我的答案的顶部
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2015-06-19
    相关资源
    最近更新 更多