簡體   English   中英

了解Java的DOM解析器

[英]Understanding DOM Parser for Java

以下是我嘗試與DOM,我的代碼和我的輸出解析的XML。 我需要從“簡單數據”中獲取信息,但是我沒有這樣做。

XML:

<kml>
  <Document>
    <Folder id="kml_ft_Meter_Rates_and_Time_Limits">
      <name>Meter_Rates_and_Time_Limits</name>
      <Placemark id="kml_1">
        <name>$1.00 / hr 2hr time limit</name>
        <snippet> </snippet>
        <description><![CDATA[<center><table><tr><th colspan='2' align='center'><em>Attributes</em></th></tr><tr bgcolor="#E3E3F3">
          <th>RATE</th>
          <td>$1.00</td>
          </tr><tr bgcolor="">
          <th>LIMIT</th>
          <td>2hr</td>
          </tr></table></center>]]>
        </description>
        <styleUrl>#ParkingMeterStyler_KMLStyler</styleUrl>
        <ExtendedData>
          <SchemaData schemaUrl="#Meter_Rates_and_Time_Limits">
            <SimpleData name="RATE">$1.00</SimpleData>
            <SimpleData name="LIMIT">2hr</SimpleData>
          </SchemaData>
        </ExtendedData>
        <LineString>
          <coordinates>-123.100739208611,49.2630169018194,0 -123.100348847572,49.2630078055425,0 </coordinates>
        </LineString>
      </Placemark>
    </Folder>
  </Document>
</kml>

出於調試目的,用sysout填充的代碼:

        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
        System.out.println("Root 1st child :" + doc.getDocumentElement().getChildNodes().item(1).getNodeName());
        System.out.println("Document 1st child :" + doc.getDocumentElement().getChildNodes().item(1).getChildNodes().item(1).getNodeName());
        System.out.println("Document 2nd child :" + doc.getDocumentElement().getChildNodes().item(1).getChildNodes().item(2).getNodeName());
        System.out.println("Document 3rd child :" + doc.getDocumentElement().getChildNodes().item(1).getChildNodes().item(3).getNodeName());
        System.out.println("Document 4th child :" + doc.getDocumentElement().getChildNodes().item(1).getChildNodes().item(4).getNodeName());
        System.out.println("Document 5th child :" + doc.getDocumentElement().getChildNodes().item(1).getChildNodes().item(5).getNodeName());
        System.out.println("-----------------------");


        NodeList nList = doc.getElementsByTagName("Placemark");
        nList = nList.item(1).getChildNodes();
        System.out.println("Placemark list, 1st placemark 1st child :" + nList.item(1).getNodeName());
        System.out.println("Placemark list, 1st placemark 2nd child :" + nList.item(2).getNodeName());
        System.out.println("Placemark list, 1st placemark 3rd child :" + nList.item(3).getNodeName());
        System.out.println("Placemark list, 1st placemark 4th child :" + nList.item(4).getNodeName());
        System.out.println("-----------------------");
        System.out.println("Placemark list, 1st placemark 9th child :" + nList.item(9).getNodeName());
        System.out.println("-----------------------");
        nList = nList.item(9).getChildNodes();
        System.out.println("Extended data, 1st child :" + nList.item(1).getNodeName());
        System.out.println("-----------------------");
        System.out.println("Schema data, 1st child :" + nList.item(1).getChildNodes().item(1).getNodeName());
        System.out.println("Simple data :" + nList.item(1).getChildNodes().item(4).getNodeName());
        System.out.println("-----------------------");
        System.out.println("Schema data, 2nd child :" + nList.item(1).getChildNodes().item(3).getNodeName());
        System.out.println("Simple data :" + nList.item(1).getChildNodes().item(4).getNodeName());

控制台輸出:

Root element :kml
Root 1st child :Document
Document 1st child :name
Document 2nd child :#text
Document 3rd child :visibility
Document 4th child :#text
Document 5th child :Style
-----------------------
Placemark list, 1st placemark 1st child :name
Placemark list, 1st placemark 2nd child :#text
Placemark list, 1st placemark 3rd child :snippet
Placemark list, 1st placemark 4th child :#text
-----------------------
Placemark list, 1st placemark 9th child :ExtendedData
-----------------------
Extended data, 1st child :SchemaData
-----------------------
Schema data, 1st child :SimpleData
Simple data :#text
-----------------------
Schema data, 2nd child :SimpleData
Simple data :#text

nList.item(0).getChildNodes().item(9).getChildNodes().item(1).getChildNodes().item(1).getTextContent() ->顯示$1.00

nList.item(0).getChildNodes().item(9).getChildNodes().item(1).getChildNodes().item(3).getTextContent() ->顯示2hr

這里nList被這條線之后使用NodeList nList = doc.getElementsByTagName("Placemark"); 請相應解決遍歷。

我不確定您到底想要什么。 也許再詳細一點。

org.w3c.Node有一個getTextContent()方法。 通常,這些w3c類將item(i)類型強制轉換為Element

要跳過空白文本(節點名稱#text`),或更簡單地直接訪問特定元素,可以使用XPath。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM