2013-04-02 23 views
9

Bunun bir çok kez sorulduğunu biliyorum, ancak yine de çalışmaya başlayamıyorum. Xml dizesini Document nesnesine dönüştürüp sonra ayrıştırıyorum. Ben Element Düğüm nesne n dökmejava xml cast Düğüm Node

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.*; 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
try 
{ 
    builder = factory.newDocumentBuilder(); 
    Document document = builder.parse(new InputSource(new StringReader(result))); 
    Node head = document.getFirstChild(); 
    if(head != null) 
    {     
    NodeList airportList = head.getChildNodes();  
    for(int i=0; i<airportList.getLength(); i++) { 
    Node n = airportList.item(i);       
    Element airportElem = (Element)n; 
    } 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

ben bir istisna java.lang.ClassCastException olsun: İşte kod org.apache.harmony.xml.dom.TextImpl org.w3c için döküm edilemez. dom.Element. Düğüm nesnesinin düğüm türünü denetlediğimde, Node.TEXT_NODE diyor. Node.ELEMENT_NODE olması gerektiğine inanıyorum. Ben haklı mıyım

Düğüm Öğeyi Element'e nasıl dönüştürebilirim, böylece element.getAttribute ("attrName") gibi bir şey yapabilirim. peşin

<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfCity xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
<City> 
    <strName>Abu Dhabi</strName> 
    <strCode>AUH</strCode> 
</City> 
<City> 
    <strName>Amsterdam</strName> 
    <strCode>AMS</strCode> 
</City> 
<City> 
    <strName>Antalya</strName> 
    <strCode>AYT</strCode> 
</City> 
<City> 
    <strName>Bangkok</strName> 
    <strCode>BKK</strCode> 
</City> 
</ArrayOfCity> 

Teşekkür:

İşte benim XML'dir! Ben Element Düğüm nesne n dökme

+2

İlk düğümün bir öğe veya metin olması gerekip gerekmediğini, gösterme n belge ne? Tamamen ayrıştırıcıdan şüpheleniyorum. Şüpheliyim, muhtemelen sadece eleman olmayan düğümleri atlamak istiyorsun. –

+0

xml'yi ekledim. Düğüm , bir metin değil, bir öğe olmalıdır. Doğrumuyum? – Student

+1

Evet, ancak ve 'arasında bir metin öğesi (muhtemelen yalnızca bir satır sonu) - ve her bir" "ve" "arasında olduğunu göreceksiniz. –

cevap

6

ben bir istisna java.lang.ClassCastException olsun: org.apache.harmony.xml.dom.TextImpl org.w3c.dom.Element için döküm edilemez. Düğüm nesnesinin düğüm türünü denetlediğimde, Node.TEXT_NODE diyor. Node.ELEMENT_NODE olması gerektiğine inanıyorum. Ben haklı mıyım

Muhtemelen, çözümleyici muhtemelen doğru değil. Bu, ayrıştırmakta olduğunuz düğümlerin bazılarının text nodes olduğu anlamına gelir. Örneğin: Yukarıda

<foo>bar</foo> 

, bir metin düğümü içeren bir foo elemanı vardır. (. Metin düğümü metin "bar" içerir)

Benzer şekilde, göz önünde bulundurun:

XML belge anlamıyla yukarıdaki benziyor
<foo> 
    <bar>baz</bar> 
</foo> 

ise, sırayla (bunlar alt düğümleri olan kök öğesi foo içeriyor):

  • bu
  • bir bar elemanı
  • bazı boşluk ile bir metin düğümü
  • bar eleman foo ilk çocuğu olmadığını o

Not biraz daha boşluk içeren bir metin düğümü. böyle görünüyordu ise:

<foo><bar>baz</bar></foo> 

sonra bar eleman foo ilk çocuğu olacağını.

17

Ben böyle bir şey gerek:

ayrıca döküm

Node n = airportList.item(i); 
if (n instanceof Element) 
{       
    Element airportElem = (Element)n; 
    // ... 
} 

ancak başkaları tarafından işaret olarak, metin düğümü var olanlar kazandı' "korumak" için deneyebileceğiniz

NodeList airportList = head.getChildNodes(); 
for (int i = 0; i < airportList.getLength(); i++) { 
    Node n = airportList.item(i); 
    if (n.getNodeType() == Node.ELEMENT_NODE) { 
     Element elem = (Element) n; 
    } 
} 
4

Bu yöntemle dökülmelidir, onları işlemek için farklı bir kod olması şartını kullanmadığınızdan emin olun.

İlgili konular