XMLReader

De wikijoan
Salta a la navegació Salta a la cerca

Versió 1

És el cas mínim més senzill:

Fitxer MyXMLFile_v1

<?xml version="1.0"?>
<company>
	<employee>
		<firstname>Tom</firstname>
		<lastname>Cruise</lastname>
	</employee>
	<employee>
		<firstname>Paul</firstname>
		<lastname>Enderson</lastname>
	</employee>
	<employee>
		<firstname>George</firstname>
		<lastname>Bush</lastname>
	</employee>
</company>

Fitxer XMLReader.java:

package v1;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLReader {

 public static void main(String argv[]) {

  try {
  File file = new File("/home/joan/workspace/XMLReader/res/MyXMLFile_v1.xml");
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(file);
  doc.getDocumentElement().normalize();
  System.out.println("Root element " + doc.getDocumentElement().getNodeName());
  NodeList nodeLst = doc.getElementsByTagName("employee");
  System.out.println("Information of all employees");

  for (int s = 0; s < nodeLst.getLength(); s++) {

    Node fstNode = nodeLst.item(s);
    
    if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
  
           Element fstElmnt = (Element) fstNode;
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname");
      Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
      NodeList fstNm = fstNmElmnt.getChildNodes();
      System.out.println("First Name : "  + ((Node) fstNm.item(0)).getNodeValue());
      NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname");
      Element lstNmElmnt = (Element) lstNmElmntLst.item(0);
      NodeList lstNm = lstNmElmnt.getChildNodes();
      System.out.println("Last Name : " + ((Node) lstNm.item(0)).getNodeValue());
    }

  }
  } catch (Exception e) {
    e.printStackTrace();
  }
 }
}

Versió 3 i 4

La v3 és un codi extret de http://www.informit.com/library/content.aspx?b=STY_XML_21days&seqNum=207 que fa precisament el que jo vull: llegeix un fitxer XML, amb elements que tenen atributs, i elements que tenen fills. A més de llegir-parsejar el fitxer, el torna a escriure. El codi original espera trobar un argument que li passem en línia de comandes. Amb el Eclipse, això es fa amb Run > Run Configurations > Argument. Tanmateix, jo modifico el codi per tal d'obrir directament el fitxer XML:

document = builder.parse("res/ch16_01.xml");

La v4 és el mateix que la v3, però ja utilitzo un fitxer amb llenguatge puppetml.


creat per Joan Quintana Compte, abril 2009 Llenguatge Java