2016-11-17 8 views
0

Ich habe das folgende Stück der XML-Datei:XPath Namen des Knotens, wo Attribut einen bestimmten Wert hat

<?xml version="1.0" encoding="UTF-8"?> 
<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SecureUML="http://RootElement/schemas/SecureUML/_zVWe83m5Eeae1LmHHETvPg/99" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://RootElement/schemas/SecureUML/_zVWe83m5Eeae1LmHHETvPg/99 ../SecureUML/SecureUML.profile.uml#_zVWe9Hm5Eeae1LmHHETvPg"> 
... 
<SecureUML:Role xmi:id="_6l9aEKgBEea49okOlb9Hog" base_Classifier="_0YCfQKgBEea49okOlb9Hog"/> 
<SecureUML:Role xmi:id="_7aToIKgBEea49okOlb9Hog" base_Classifier="_3xegQKgBEea49okOlb9Hog"/> 

Wie kann ich den Namen des Knotens, wo die base_Classifier zum Beispiel _0YCfQKgBEea49okOlb9Hog oder _3xegQKgBEea49okOlb9Hog? Diese 2 Strings Ich habe sie in einem ArrayList so dass ich smth wie:

String tmp = items.get(j).getId(); 
String stereotypes = "//*[@base_Classifier="+tmp+"]"; 
NodeList nodeList1 = (NodeList) xpath.compile(stereotypes) 
    .evaluate(doc, XPathConstants.NODESET); 

aber die nodeList1 leer ist.

Ich erwähne, dass ich für beide _0YCfQKgBEea49okOlb9Hog und _3xegQKgBEea49okOlb9HogSecureUML:Role erhalten möchte.

ich auch erwähnen, dass ich den Namespace mit smth wie

HashMap<String, String> prefMap = new HashMap<String, String>() { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    { 
     put("xmi", "http://www.omg.org/spec/XMI/20131001"); 
     put("SecureUML", "http://RootElement/schemas/SecureUML/_zVWe83m5Eeae1LmHHETvPg/99"); 
    } 
}; 

Vielen Dank im Voraus registriert!

Madalina

Antwort

0

Ihr XPath Prädikat ist nicht korrekt, wie die Art des Attributs ist offensichtlich ein String kein Number, so müssen Sie Ihren Attributwert zwischen Doppel- oder Apostrophe setzen, dann getNodeName() rufen zu erhalten der Name des Knotens, als nächstes:

String stereotypes = String.format("//*[@base_Classifier=\"%s\"]", tmp); 
NodeList nodeList1 = (NodeList) xpath.compile(stereotypes) 
    .evaluate(doc, XPathConstants.NODESET); 
System.out.println(nodeList1.item(0).getNodeName()); 

Output:

SecureUML:Role 
Verwandte Themen