2009-11-13 2 views
0

Je reçois un NullReferenceException en essayant de lire un attribut d'un fichier xml - quel attribut lire à partir de quel élément est défini par l'utilisateur.NullReference à XML-Operations

Le StackTrace ne cesse de me rediriger vers cette ligne (marqué)

XmlDocument _XmlDoc = new XmlDocument(); 
_XmlDoc.Load(_WorkingDir + "Session.xml"); 
XmlElement _XmlRoot = _XmlDoc.DocumentElement; 
XmlNode _Node = _XmlRoot.SelectSingleNode(@"group[@name='" + _Arguments[0] + "']"); 
XmlAttribute _Attribute = _Node.Attributes[_Arguments[1]]; // NullReferenceException 

Où ai-je manqué le point? Quelle référence manque ici? Je ne peux pas comprendre ...

Edit: L'élément existe et le fait de l'attribut (y compris une valeur)

<?xml version="1.0" encoding="utf-8"?> 
<session> 
<group name="test1" read="127936" write="98386" /> 
<group name="test2" read="352" write="-52" /> 
<group name="test3" read="73" write="24" /> 
<group name="test4" read="264524" write="646243" /> 
</session> 

Des explications complémentaires: Le _Arguments[] est un tableau Splitted de l'entrée utilisateur. L'utilisateur, par exemple entrées test1_read - qui est à Splitted _Arguments[0] = "test" et _Arguments[1] = "read"

+0

Pouvez-vous publier le fichier XML en cours d'analyse? – Konamiman

Répondre

1

Ne serait-il pas préférable d'utiliser la méthode XmlElement.GetAttribute? Cela signifie que vous pouvez ensuite utiliser le XmlElement.HasAttribute pour faire une vérification avant d'essayer d'y accéder. Cela éviterait définitivement le NullReference.

Exemple

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(_WorkingDir + "Session.xml"); 
XmlElement xmlRoot = xmlDoc.DocumentElement; 
foreach(XmlElement e in xmlRoot.GetElementsByTagName("group")) 
{ 
    // this ensures you are safe to try retrieve the attribute 
    if (e.HasAttribute("name") 
    { 
     // write out the value of the attribute 
     Console.WriteLine(e.GetAttribute("name")); 

     // or if you need the specific attribute object 
     // you can do it this way 
     XmlAttribute attr = e.Attributes["name"];  
     Console.WriteLine(attr.Value);  
    } 
} 

Aussi je vous suggère de jeter un oeil à l'aide LinqToXml lors de l'analyse des documents XML dans .NET.

0

En l'absence du fichier XML que vous analysez, je suppose que peut-être dans l'expression XPath, vous devez spécifier //group au lieu de simplement group.

Questions connexes