Je suis frustré d'avoir extrait certains éléments d'un document JDOM en utilisant une expression XPath. Voici un exemple de document XML: je souhaite supprimer complètement les éléments ItemCost du document, mais j'ai du mal à obtenir une expression XPath pour évaluer quoi que ce soit en ce moment.Interactions JDOM, XPath et Namespace
<srv:getPricebookByCompanyResponse xmlns:srv="http://ess.com/ws/srv">
<srv:Pricebook>
<srv:PricebookName>Demo Operator Pricebook</srv:PricebookName>
<srv:PricebookItems>
<srv:PricebookItem>
<srv:ItemName>Demo Wifi</srv:ItemName>
<srv:ProductCode>DemoWifi</srv:ProductCode>
<srv:ItemPrice>15</srv:ItemPrice>
<srv:ItemCost>10</srv:ItemCost>
</srv:PricebookItem>
<srv:PricebookItem>
<srv:ItemName>1Mb DIA</srv:ItemName>
<srv:ProductCode>Demo1MbDIA</srv:ProductCode>
<srv:ItemPrice>20</srv:ItemPrice>
<srv:ItemCost>15</srv:ItemCost>
</srv:PricebookItem>
</srv:PricebookItems>
</srv:Pricebook>
</srv:getPricebookByCompanyResponse>
J'utiliser normalement juste une expression telle que // srv: ItemCost pour identifier ces éléments, qui fonctionne très bien sur d'autres documents, mais ici, il revient sans cesse 0 nœuds dans la liste. Voici le code que je l'ai utilisé:
Namespace ns = Namespace.getNamespace("srv","http://ess.com/ws/srv");
XPath filterXpression = XPath.newInstance("//ItemCost");
filterXpression.addNamespace(ns);
List nodes = filterXpression.selectNodes(response);
où la réponse est un élément JDOM contenant l'extrait de code XML ci-dessus (vérifié avec un XMLOutputter). les nœuds ont continuellement size() == 0 lors de l'analyse de ce document. En utilisant l'analyseur XPath dans Eclipse sur le même document, cette expression ne fonctionne pas non plus. Après avoir creusé, j'ai demandé à l'évaluateur Eclipse de travailler avec l'expression suivante: // * [nom-local() = 'ItemCost'], mais en remplaçant // srv: ItemCost dans le code Java, cela ne produisait toujours aucun résultat. Une autre chose que j'ai remarquée est que si je supprime la déclaration d'espace de noms du XML, // srv: ItemCost résoudra correctement dans l'analyseur Eclipse, mais je ne peux pas le retirer du XML. Je me suis gratté la tête pour nos heures sur celui-ci maintenant, et j'apprécierais vraiment de me pousser dans la bonne direction.
Un grand merci
Edit: Code fixe -
Document build = new Document(response);
XPath filterXpression = XPath.newInstance("//srv:ItemCost");
List nodes = filterXpression.selectNodes(build);
Désolé @Bryn, je sais comment faire cela en C#, mais je n'ai aucune expérience avec JDOM :(Donc, j'ai supprimé ma réponse. –