# XPath mit Java und w3c-Document



## karstenkurt (1. April 2008)

Hallo,

ich bekomme aus einer Library ein w3cDocument-Object und möchte dieses mit Xpath auslesen. Das klappt auch soweit, nur bin ich mir nicht sicher, ob das so das Gelbe vom Ei ist? Stelle mal den Code zur Diskussion. Vielleicht hat ja der ein oder andere nee pfiffige Idee?

XML-Dokument sieht so aus (modifiziert), aber entspricht dem Aufbau

```
<?xml version="1.0" encoding="UTF-8"?>
<a-response>
	<u-list>
		<uuu type="new">
			<eee id="XXX001401">
				<ddd>1401</ddd>
				<name>irgendwasneues</name>
			</eee>
			<last-modified>20071028080513</last-modified>
		</uuu>
		<uuu type="new">
			<eee id="XXX001402">
				<ddd>1402</ddd>
				<name>irgendwasneues</name>
			</eee>
			<last-modified>20071028080513</last-modified>
		</uuu>
		<uuu type="new">
			<eee id="XXX001403">
				<ddd>1403</ddd>
				<name>irgendwasneues</name>
			</eee>
			<last-modified>20071028080513</last-modified>
		</uuu>
		<uuu type="mod">
			<eee id="XXX001398">
				<ddd>1398</ddd>
				<name>irgendwasgeaendertes</name>
			</eee>
			<last-modified>20071128090513</last-modified>
		</uuu>
		<uuu type="del">
			<eee id="XXX001222">
				<ddd>1222</ddd>
				<name>irgendwasgeloeschtes</name>
			</eee>
			<last-modified>20071126090513</last-modified>
		</uuu>
	</u-list>
</a-response>
```

Code

```
import java.util.ArrayList;
import javax.xml.transform.TransformerException;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public ArrayList parseUpdateDocument(Document doc) {
ArrayList response = new ArrayList();
		ResponseDTO responseItem=new ReponseDTO();
    String xpath_new_key = "/a-response/u-list/uuu[@type='new']/eee";
    String xpath_del_key = "/a-response/u-list/uuu[@type='del']/eee";
    String xpath_mod_key = "/a-response/u-list/uuu[@type='mod']/eee";
    try {
      NodeList NewList=XPathAPI.selectNodeList(doc, xpath_new_key);
      for (int s = 0; s < NewList.getLength(); s++) {
        Node UpdateListNode = NewList.item(s);
        if (UpdateListNode.getNodeType() == Node.ELEMENT_NODE) {
          Node ModifiedNode=XPathAPI.selectSingleNode(UpdateListNode, "/a-response/u-list/uuu[@type='new']/last-modified");
          Node KeyNode=XPathAPI.selectSingleNode(UpdateListNode, "/a-response/u-list/uuu[@type='new']/eee/ddd");
          Node NameNode=XPathAPI.selectSingleNode(UpdateListNode, "/a-response/u-list/uuu[@type='new']/eee/name");
          responseItem.setName(NameNode.getChildNodes().item(0).getNodeValue().toString());
          responseItem.setKey(KeyNode.getChildNodes().item(0).getNodeValue().toString());
          responseItem.setLastModified(ModifiedNode.getChildNodes().item(0).getNodeValue().toString());
          responseItem.setID(UpdateListNode.getAttributes().getNamedItem("id").toString());
          responseItem.setType("NEW");
          }
          response.addItem(responseItem);
      }
return response;
  }
```

Wie gesagt, vielleicht hab Ihr ja Ideen zur Verbesserung!
KK


----------

