Générer/obtenir xpath de nœud XML, java

Je suis intéressé par des conseils/pseudo code/explication plutôt que de la mise en œuvre effective.

  • Je voudrais aller à la fosse du document xml, l'ensemble de ses nœuds
  • Vérifier le nœud attribut existence

Cas si le nœud n'a pas d'attribut, get/generate String with value of its xpath

Cas si le nœud n'ont attributs, itérer creux liste d'attributs et de créer xpath pour chaque attribut, y compris le nœud.

Parole de conseils? J'espère que vous apporter des éléments utiles intel

EDIT:

Des raisons pour cela est .. je suis en train d'écrire des tests automatisés dans jmeter, donc pour chaque demande, j'ai besoin de vérifier que la demande a effectivement fait son travail, donc je suis en affirmant résultats en obtenant les valeurs des nœuds xpath.(plus d'info pertinente)

Lorsque la demande est faible sa pas de problème pour créer affirme par la main, mais pour les grandes ses vraiment une douleur dans le .. (plus d'info pertinente)

BOUNTY :

Je suis à la recherche pour java approche

Objectif

Mon objectif est de parvenir à la suite de cette ex fichier xml :

<root>
    <elemA>one</elemA>
    <elemA attribute1='first' attribute2='second'>two</elemA>
    <elemB>three</elemB>
    <elemA>four</elemA>
    <elemC>
        <elemB>five</elemB>
    </elemC>
</root>

de produire les éléments suivants :

//root[1]/elemA[1]='one'
//root[1]/elemA[2]='two'
//root[1]/elemA[2][@attribute1='first']
//root[1]/elemA[2][@attribute2='second']
//root[1]/elemB[1]='three'
//root[1]/elemA[3]='four'
//root[1]/elemC[1]/elemB[1]='five'

Expliqué :

  • Si la valeur du nœud/texte n'est pas null/zero, obtenir xpath , ajoutez = 'nodevalue' pour l'affirmation but
  • Si le nœud a les attributs de créer affirmer pour eux aussi

BOUNTY MISE À JOUR :

J'ai trouvé cet exemple, il ne produit pas les résultats corrects , mais je suis à la recherche de quelque chose comme ceci:

http://www.coderanch.com/how-to/java/SAXCreateXPath

  • Bonne question, +1. Voir ma réponse complète XSLT 1.0 solution qui prend un paramètre qui contient un node-set et produit une expression XPath pour chaque nœud dans ce node-set. Les nœuds peuvent être de tout type: document-nœud, élément, nœud texte, d'attribut, de commentaire, de PI, de l'espace de noms.
  • Ce genre d'expression XPath voulez-vous bien? Vous pouvez simplement prendre l'index de chaque élément dans l'un de ses parents getChildren() nodelist et de créer un xpath comme /*[5]/*[2]/*[8]/@yourattr. Mais si vous voulez faire valoir des résultats, ne devriez-vous pas être en train de faire l'inverse? Écrire une expression xpath qui retourne vrai si votre XML est correct, et false si elle ne l'est pas, alors l'évaluer?
  • Je veux créer des requêtes xpath de la demande, je l'envoyer(si je peux l'utiliser pour vérifier les résultats), pas l'autre manière autour. J'ai mis à jour ma question
  • Il y a des trous dans la mise à jour de votre question. Que faire si un élément a plus d'un nœud de texte comme dans: <x>text 1<y/>text 2</x> Comment le voulait processus de solution un tel élément? Je vais mettre à jour ma réponse avec à la fois une transformation XSLT solution et une solution C# (mon Java est un peu rouillé) -- ce que ce sera utile pour vous?
  • Novatchev merci pour les commentaires, aussi loin que je peux voir, ce cas ne se produit jamais dans mes fichiers xml, et je ne pense pas que ça. Comme BalusC a suggéré que je pourrais laisser d'exécution java XSLT, si elle produit de bons résultats à titre d'exemple que j'ai posté ci-dessus. tnx
  • C'est bon à savoir, merci. Donc, il peut être utile si vous mettez cette précision dans la question elle-même. À partir de votre dernier commentaire, je peux conclure que le fait d'aller de l'avant avec XSLT et éventuellement C# solution sera de valeur pour vous?
  • Novatchev oui, il serait plus que bienvenue. Merci
  • J'ai produit une complète et très court (30 lignes) XSLT c'est aussi une solution facile à comprendre et permet de résoudre votre problème exactement.
  • J'ai aussi ajouté une étape-par-étape de l'explication de la solution. Je vous remercie pour votre appréciation.
  • Novatchev merci vraiment l'apprécier
  • Merci pour la nouvelle raffinement du problème. Oui, c'était facile à ajuster ma solution pour traiter le format mis à jour. J'ai mis à jour dans ma réponse à la fois le code et les explications. Merci de fournir ce problème de nice.
  • Double Possible de comment faire pour récupérer correspondant xpath

InformationsquelleAutor ant | 2011-01-20