Come faccio a selezionare qualcosa con uno spazio dei nomi in bianco con Jaxen?
Domanda
Ho il seguente codice XML:
<config xmlns="http://www.someurl.com">
<product>
<brand>
<content />
</brand>
</product>
</config>
lo sto leggendo bene in JDOM.
Tuttavia, quando cerco di usare Jaxen per afferrare il contenuto, non posso sembrare ottenere nulla.
Ecco un esempio di ciò che non sembra funzionare:
XPath xpath = new JDOMXPath("config");
SimpleNamespaceContext namespaceContext = new SimpleNamespaceContext();
namespaceContext.addNamespace("", "http://www.someurl.com");
xpath.setNamespaceContext(namespaceContext);
assert xpath.selectNodes(document).size() > 0 : "should find more than 0";
Questa affermazione non riesce sempre.
Che cosa sto facendo di sbagliato?
Soluzione
È necessario assegnare un prefisso. Fare quella chiamata addNamespace ( "hopfrog", "http: // ..."); Poi fare il XPath ( "hopfrog: config");
Tenete a mente che i prefissi in XML non fanno parte del modello di dati reali. Il modello di dati reali assegna un URL, eventualmente vuoto, ad ogni elemento e attributo. È possibile utilizzare qualsiasi prefisso che si desidera in XPath fintanto che è destinato a l'URL destra. Dal momento che l'URL che si desidera in bianco, si associa un prefisso al 'vuoto'.