2008-09-19 11 views
24

Comment une personne peut-elle valider qu'un élément spécifique existe dans un fichier XML? Dites que j'ai un fichier XML en constante évolution et que je dois vérifier chaque élément avant de le lire/l'analyser.Vérifier si l'élément XML existe

Répondre

40
if(doc.SelectSingleNode("//mynode")==null).... 

devrait le faire (où doc est votre objet XmlDocument, évidemment)

Sinon, vous pouvez utiliser un XSD et valider contre cette

+3

Que signifie le "//" représenter? – Qsiris

+4

@Qsiris "//" est XPath et signifie sélectionner n'importe quel élément mynode, où que ce soit – Verakso

3

Je ne sais pas ce que vous êtes désireux de faire, mais en utilisant un DTD ou schéma peut être tout ce dont vous avez besoin pour valider le xml.

Sinon, si vous voulez trouver un élément, vous pouvez utiliser une requête xpath pour rechercher un élément particulier.

+1

Où est la réponse à la question "Comment" – Sam

+0

@sam - la question n'était pas particulièrement claire alors donner quelques conseils est tout à fait ok A MON HUMBLE AVIS. En cherchant plus loin sur xpath ou dtd, vous obtiendrez plus de code que vous ne pouvez en faire un! Y a-t-il un problème particulier avec lequel vous trafiquez? Je vais essayer d'aider. – paul

1

Vous pouvez valider cela et bien plus en utilisant un langage de schéma XML, tel que XSD.

Si vous voulez dire conditionnellement, dans le code, alors XPath vaut également le détour.

4

Vous pouvez parcourir tous les nœuds et voir si un nœud existe.

doc.Load(xmlPath); 
     XmlNodeList node = doc.SelectNodes("//Nodes/Node"); 
     foreach (XmlNode chNode in node) 
     { 
      try{ 
      if (chNode["innerNode"]==null) 
       return true; //node exists 
      //if ... check for any other nodes you need to 
      }catch(Exception e){return false; //some node doesn't exists.} 
     } 

Vous itérer tous les éléments de nœud sous le nœud (que c'est la racine) et vérifiez si le nœud nommé « innerNode » (ajouter d'autres si vous avez besoin) existe. try..catch est parce que je soupçonne que cela jettera l'erreur «référence d'objet non définie» populaire si le noeud n'existe pas.

0

Voici une fonction simple pour vérifier si un nœud particulier est présent ou non dans le fichier xml.

public boolean envParamExists(String xmlFilePath, String paramName){ 
    try{ 
     Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(xmlFilePath)); 
     doc.getDocumentElement().normalize(); 
     if(doc.getElementsByTagName(paramName).getLength()>0) 
      return true; 
     else 
      return false; 
    }catch (Exception e) { 
     //error handling 
    } 
    return false; 
} 
1

en plus de sangam Code

if (chNode["innerNode"]["innermostNode"]==null) 
      return true; //node *parentNode*/innerNode/innermostNode exists 
3

Que diriez-vous d'essayer ceci:

using (XmlTextReader reader = new XmlTextReader(xmlPath)) 
{ 
    while (reader.Read()) 
    { 
     if (reader.NodeType == XmlNodeType.Element) 
     { 
      //do your code here 
     } 
    } 
} 
3

// si le problème est "juste" pour vérifier que l'élément existe dans le fichier xml devant vous // extraire la valeur que vous pourriez faire comme ceci

XmlNodeList YOURTEMPVARIABLE = doc.GetElementsByTagName("YOUR_ELEMENTNAME"); 

     if (YOURTEMPVARIABLE.Count > 0) 
     { 
      doctype = YOURTEMPVARIABLE[0].InnerXml; 

     } 
     else 
     { 
      doctype = ""; 
     } 
0

Un peu en retard, mais si elle aide, cela fonctionne pour moi ...

XmlNodeList NodoEstudios = DocumentoXML.SelectNodes("//ALUMNOS/ALUMNO[@id=\"" + Id + "\"]/estudios"); 

string Proyecto = ""; 

foreach(XmlElement ElementoProyecto in NodoEstudios) 
{ 
    XmlNodeList EleProyecto = ElementoProyecto.GetElementsByTagName("proyecto"); 
    Proyecto = (EleProyecto[0] == null)?"": EleProyecto[0].InnerText; 
} 
0

// Vérifiez la valeur de l'élément XML si existe en utilisant XmlReader

  using (XmlReader xmlReader = XmlReader.Create(new StringReader("XMLSTRING"))) 
      { 

       if (xmlReader.ReadToFollowing("XMLNODE")) 

       { 
        string nodeValue = xmlReader.ReadElementString("XMLNODE");     
       } 
      }  
Questions connexes