0

DOMを使用して次のXMLを解析してみました。要素の値を出力できません。誰かが私が要素の値を印刷するのを手伝ってくれますか?

前もって感謝します

<tns:CustomerDetails xmlns:xe="http://www.w3.org/2001/04/xmlenc#" xmlns:xd="http://www.w3.org/2000/09/xmldsig#" xmlns:tns="http://abc.com/elements" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pf="http://abc.com/Service">
  <tns:CustomerId>360817</tns:CustomerId>
  <tns:CustomerName>ABC Corp</tns:CustomerName>
  <tns:PAN>awap</tns:PAN>
  <tns:Timestamp>2010-05-20T12:20:19Z</tns:Timestamp>
  <tns:RequestId>397</tns:RequestId>
  <tns:PIN>1234</tns:PIN>
</tns:CustomerDetails>

私のコード

      File infile = new File("D:\\Cust.xml");
  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  Document doc = dBuilder.parse(infile);
  doc.getDocumentElement().normalize();

  System.out.println("root of xml file " +
                     doc.getDocumentElement().getNodeName());
  System.out.println("==========================");

  NodeList list = doc.getElementsByTagName("CustomerDetails");
  System.out.println(list.getLength());
  Element name = doc.getElementById("CustomerId");
  if (name == null) {
    System.out.println("There is no element with the ID ");
  } else {
    Text text = (Text)name.getFirstChild();
    System.out.println("The ID " + " locates the name " + text.getData());
  }

私はで試しました

Element name = doc.getElementById("tns:CustomerId");

また..私は印刷中にnullを取得します

4

1 に答える 1

0

ここでモデルを混合しています。 getElementByIdは、ドキュメントの DTD によって ID として識別される属性を持つ要素用であり、ドキュメントには DTD がないため、有用なものは何も提供されません。

ドキュメントは名前空間を使用するため、「NS」メソッドを使用して要素を抽出する必要があり、要素に含まれるテキストには使用できますgetTextContent

  File infile = new File("D:\\Cust.xml");
  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  // namespaces - DocumentBuilderFactory is *not* namespace aware by default
  dbFactory.setNamespaceAware(true);
  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  Document doc = dBuilder.parse(infile);
  doc.getDocumentElement().normalize();

  System.out.println("root of xml file " +
                     doc.getDocumentElement().getNodeName());
  System.out.println("==========================");

  NodeList list = doc.getElementsByTagNameNS(
        "http://abc.com/elements", "CustomerDetails");
  System.out.println(list.getLength());
  for(int i = 0; i < list.getLength(); i++) {
    Element custDetails = (Element)list.item(i);
    Element id = custDetails.getElementsByTagNameNS(
        "http://abc.com/elements", "CustomerId").item(0);
    System.out.println("Customer ID: " + id.getTextContent());
    Element name = custDetails.getElementsByTagNameNS(
        "http://abc.com/elements", "CustomerName").item(0);
    System.out.println("Customer Name: " + name.getTextContent());
  }
于 2013-02-05T13:38:26.630 に答える