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
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
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.
Où est la réponse à la question "Comment" – Sam
@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
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.
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;
}
en plus de sangam
Code
if (chNode["innerNode"]["innermostNode"]==null)
return true; //node *parentNode*/innerNode/innermostNode exists
Que diriez-vous d'essayer ceci:
using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
//do your code here
}
}
}
// 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 = "";
}
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;
}
// 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");
}
}
Que signifie le "//" représenter? – Qsiris
@Qsiris "//" est XPath et signifie sélectionner n'importe quel élément mynode, où que ce soit – Verakso