# Problem mit XPath und DOM4J



## Masipulami (29. Oktober 2007)

Hi zusammen,

hier mal ein kleiner Ausschnitt aus meinem Programm:


```
private Document createConfirmationXML(String generatePDF, String validatePrev, String createdFlag, String statusMessage)  
	{
		if (xmlConfirmationDoc == null) // first creation of confirmation Doc
		{
			xmlConfirmationDoc = DocumentFactory.getInstance().createDocument();
			confirmation = xmlConfirmationDoc.addElement("confirmation").addAttribute("generate_pdf", generatePDF).addAttribute("week", week).addAttribute("validate_prev", validatePrev)
											 .addAttribute("xsi:noNamespaceSchemaLocation", "confirmations.xsd");
			confirmation.add(new org.dom4j.Namespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"));
			confPrev = confirmation.addElement("prevision").addAttribute("id", prevId).addAttribute("created", createdFlag);
			confPrev.addElement("status").addText(statusMessage);
		}
		else // in case confirmation doc already exists
		{
			// it has to be checked if there is already a <prevision> element for the given prevId
			Map uris = new HashMap();
			uris.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
			
			XPath xpath = xmlConfirmationDoc.createXPath("/confirmation/prevision[@id='" + prevId + "']");
			xpath.setNamespaceURIs(uris);
			
			List results = xpath.selectNodes(xmlConfirmationDoc);
		    
		    if (results.size() == 0) // <prevision> element does not already exist for the given prevId
		    {
				confPrev = confirmation.addElement("prevision").addAttribute("id", prevId).addAttribute("created", createdFlag);
				confPrev.addElement("status").addText(statusMessage);
		    }
		    else // <prevision> element already exists for the given prevId
		    {
		    	for (Iterator iterator = results.iterator(); iterator.hasNext();) 
		    	{
		    		Element confPrevision = (Element)iterator.next();
		    		confPrevision.addElement("status").addText(statusMessage);
		    	}
		    }
		}
		return xmlConfirmationDoc;
	}
```

Und hier mal ein Beispiel für eine confirmation.xml, die erstellt und mit Hilfe von XPath wie oben beschrieben geparsed werden muss:


```
<?xml version="1.0" encoding="UTF-8"?>

<confirmation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generate_pdf="true" week="2007-10-28" validate_prev="true" xsi:noNamespaceSchemaLocation="confirmations.xsd">
  <prevision id="L_2007123" created="true">
    <status>existing prevision modified successfully</status>
  </prevision>
  <prevision id="L_2007124" created="true">
    <status>existing prevision modified successfully</status>
  </prevision>
</confirmation>
```

Das komische ist, dass wenn ich exakt den gleichen XPath-Ausdruck mit XML-Spy teste, ich auch den gewünschten Knoten erhalte.

Ach ja, ich nutze Java 1.4 (geht auf Arbeit nicht anders) und DOM4J 1.6.1.

Viele Grüße,
Masipulami


----------

