8
votes

Trouvez si un élément existe par un nom de balise particulier dans XML

J'ai un fichier XML lorsque certains sous-balises (éléments de noeud enfant) sont facultatifs. E.G.

if(fstelm_Note.getElementsByTagName("rest")!=null){
    if(fstelm_Note.getElementsByTagName("rest")==null){
        break;
    }
    NodeList restElmLst = fstelm_Note.getElementsByTagName("rest");
    Element restElm = (Element)restElmLst.item(0);
    NodeList rest = restElm.getChildNodes();

    String restVal = ((Node)rest.item(0)).getNodeValue().toString();

}else if(fstelm_Note.getElementsByTagName("note")!=null){
    if(fstelm_Note.getElementsByTagName("note")==null){
        break;
    }

    NodeList noteElmLst = fstelm_Note.getElementsByTagName("note");
    Element noteElm = (Element)noteElmLst.item(0);

    NodeList note = noteElm.getChildNodes();
    String noteVal = ((Node)note.item(0)).getNodeValue().toString();
}


1 commentaires

Pas suffisamment d'informations. Affichez le code qui a le problème et indiquez où le NPE est lancé.


5 Réponses :


1
votes

C'est peut-être que vos NOPRISTES ne sont pas nuls, mais sont vides. Pouvez-vous essayer de changer votre code comme ceci et voyez ce qui se passe? XXX

etc. (Syntaxe DoubleCheck, etc., puisque je ne suis pas devant un compilateur.)


0 commentaires

1
votes

Vos exigences sont extrêmement pas clair mais j'utiliserais très probablement le javax.xml.xpath package pour analyser votre document XML avec le Langue de chemin XML (XPath) .

Regardez:


1 commentaires

Bonjour Pasacal, merci pour vos suggestions. XPATH est-il un service Web (qui nécessite Internet pour le code)? Puis-je interroger le document XML en utilisant xpath? Est-ce similaire à XQuery? J'ai eu des problèmes avec la configuration de XQuery - alors ne pouviez pas le faire sortir. Pouvez-vous suggérer des didacticiels où je peux utiliser XPath ou XQuery? Merci pour votre temps.



13
votes

J'ai eu ce même problème (en utilisant getelementsbytagname () pour obtenir des nœuds "facultatifs" dans un fichier XML) afin que je puisse dire par expérience comment le résoudre. Il s'avère que getelementsbytagname ne retourne pas NULL STROR> lorsque aucun nœud correspondant n'est trouvé; Au lieu de cela, il renvoie un objet nodéliste de la longueur zéro.

Comme vous pouvez le deviner, la bonne façon de vérifier si un nœud existe dans un fichier XML avant d'essayer de récupérer son contenu serait similaire à: p>

NodeList nl = element.getElementsByTagName("myTag");
if (nl.getLength() > 0) {
    value = nl.item(0).getTextContent();
}


0 commentaires

0
votes

Essayez quelque chose comme ci-dessous

bool hasCity = OrderXml.Elements("City").Any();


0 commentaires

0
votes

Tout d'abord, vous devez créer le nodelist code>, puis vérifier la longueur de NODELIST code> pour vérifier si l'élément actuel existe ou non dans la chaîne XML.

NodeList restElmLst = fstelm_Note.getElementsByTagName("rest");

if (restElmLst.getLength() > 0) {
    String restVal = restElm.getElementsByTagName("rest").item(0).getTextContent(); 
}                               


0 commentaires