J'ai le code suivant: et ceci est le résultat ... p> juste pour clarifier < / Strong>, si je fais cela: p> ou p> i obtenir un Comment cela peut-il être? Selon Suns Java 1.5 API < / a> nœud et nodeset doit mapper sur classcastexception code > p>
org.w3c.dom.node code> et
org.w3c.dom.Nodelist code> respectivement p>
5 Réponses :
Modifier en réponse au commentaire: P>
Désolé, je n'ai pas fait attention à l'instance de. En regardant le code source , il apparaît que Donc, il semble que les retours de l'API XPath ne soient que cohérents lorsqu'ils sont utilisés dans cette API. Pas exactement ce que vous vouliez entendre, je suis sûr. Pouvez-vous utiliser la mise en œuvre JDK intégrée? Je sais que cela renvoie nœud code> est une interface. Vous devez avoir une classe concrète pour la mise en œuvre. Et
getclass () code> retourne cette classe de béton. P>
tinynodeimpl code> ne met pas en œuvre
org.w3c.dom.node code>. Et en regardant les documents JDK, il semble que cela ne soit pas obligé de: le Doc pour Javax.xml.xpath vous désigne XPathConstants pour le type de résultat, et il fait référence au type" The XPath 1.0 NodeT Type de données "(qui, si vous regardez sur la spécification XPath 1.0, n'est pas défini. ). p>
org.w3c.dom code> objets. P>
Merci, je vais clarifier la question. Et oui, je reçois une classe de classe, vous pouvez le dire par les 2 dernières lignes du code (Évaluez l'instance de noeud) si ce n'est pas une instanceOf, il n'applique pas cette interface, une classe exceptionnelle n'aura qu'un.
kdgregory est correct que IT Peut-être utile de souligner que vous pouvez utiliser une instance de Par exemple, cela devrait fonctionner simplement: P> nœud code> est juste une interface, et
tinyelementimpl code> implémente cette interface.
expression.valua () code> ne peut pas renvoyer une instance de
nœud code>, il doit renvoyer une classe de béton que implémente em> noeud.
tinyelementimpl code> comme em> comme
noeud code>, et vous pouvez facilement lancer des instances de
tinyélémentalementimp code> à
noeud code>. p>
Node result = (Node) expression.evaluate(someXML, XPathConstants.NODE);
Veuillez lire le commentaire sur la réponse de KdGregory. TinyelementalImpl ne met pas en œuvre le noeud au fait.
Ok, oui, je vois que j'ai fait une hypothèse incorrecte. Néanmoins, je pense que l'esprit de ma réponse traite de certains aspects de la question dans un effort honnête pour aider. Je peux vivre avec le Downvote.
C'est un peu étrange, celui-ci. Saxon Javadoc dit que Je suppose que Saxon évite le modèle DOM standard en faveur de son propre. Je soupçonne que le solution: Utilisez les types DOM SAXON, comme retourné ou n'utilisez pas Saxon. P> TinyelementImpl code> ne Implémentez n'importe laquelle des interfaces
org.w3c.dom code> et pourtant les récupérer de l'évaluation XPath. p>
xpathConstants.node code> que vous passez à
évaluer code> est vraiment juste un indice. Il est permis aux expressions de XPath de retourner n'importe quelle vieille chose (par exemple, Apache JXPath utilise des expressions XPath pour interroger Java Objects graphiques), il est donc autorisé pour Saxon de renvoyer ses propres types DOM plutôt que sur
org.w3c code> standard. P>
OK Je l'ai compris!
Si la méthode d'évaluation reçoit une sortie d'entrée, l'erreur ci-dessus se produit. P>
E.g. P>
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder(); Document someXML = documentBuilder.parse(new InputSource(new StringReader("<someXML>...</someXML>)")); Object result = expression.evaluate(someXML, XPathConstants.NODE); Node node = (Node) result; // works
A du sens .... Si vous mettez W3C DOM dans, vous obtenez W3C Dom Out. Sinon, vous êtes exclusif DOM.
Essayez ce code: IT imprime: p> L'objet renvoyé est de type nodeInfo code> , vous avez donc besoin d'envelopper comme un vrai noeud
code>, vous pouvez donc accéder à ses méthodes: p>
Cela fonctionne et est la réponse la plus utile sur la page. Bien fait!