2010-02-28 81 views
3

我想解析我的C#中的XML。为什么我的XmlReader.GetAttribute()没有返回值?

下面是该文件的一部分是相关的:

<holder name="wnd_login" width="300" x="20" height="180">...</holder> 

下面是应该读它的代码:我看周围

while (reader.Read()) 
{ 
    if (reader.IsStartElement()) 
    { 
     switch (reader.Name) 
     { 
      case "holder": 
       Holder holder = new Holder(reader.GetAttribute("name")); 
       ... 
     } 
    } 
} 

了常见的错误是忘记检查看看元素是否是一个开始元素。我添加了它,但GetAttribute仍然返回null。任何想法?

+0

您确定您的读者位于'holder'元素吗?您可能正在查看另一个节点(其中包括除“元素”之外的其他节点类型)。 – 2010-02-28 16:57:33

+0

我认为在这种情况下看到实际的xml文件可能会有帮助。我能够获得这个特定节点的名称(使用你的代码),没有问题。 – DotNetWala 2010-03-10 21:37:33

+0

GetAttribute(字符串)的重载需要属性的限定名称;这是相关的吗? – Flynn1179 2010-06-01 13:03:09

回答

-4

也许你需要获得在第一的XMLNodes使用XPath格式,然后通过迭代的XMLNodes在这样的:

 
foreach(XmlNode node in XmlNodes){ 
    if (node["holder"].HasAttribues != null && node["holder"].Attributes.Count >1){ 
     for (int i = 0; i < node["holder"].Attributes.Count; i++){ 
      try{ 
       XmlAttribute attr = node["holder"].Attributes[i]; 
       if (attr != null){ 
        .... 
       } 
      }catch(XmlException xmlEx){ 
       // Do something here with this...output to log? 
      } 
     } 
    } 
} 

希望这有助于 最好的问候, 汤姆。

+0

OP使用XmlReader而不是DOM。在我的例子中,我也不确定这里发生了什么。 DOM不需要这些类型的回转来访问属性,我也不能想象你的catch块如何被输入。 – Josh 2010-02-28 04:28:32

相关问题