2015-04-29 2 views
1

Я использую парсер DOM в Java и пытаюсь вернуть элементы дочерних узлов. Вот что мой XML выглядит следующим образом:Получить узлы дочернего узла XML при использовании парсера DOM

<?xml version="1.0" encoding="UTF-8"?> 
<body> 
    <group name="Recently Added"> 
    <item> 
     <asset>138682</asset> 
     <date>Mar 05, 2015</date> 
     <artist> 
     <![CDATA[Marlin G. Meharry, D.D.S]]> 
     </artist> 
     <album> 
     <![CDATA[Career Day - Marlin G. Meharry, D.D.S]]> 
     </album> 
     <url> 
     <![CDATA[http://web2.puc.edu/Departments/Media_Services/file/2015/CarDayMarlinGMeharryDDS.mp3]]> 
     </url> 
     <length> 
     <![CDATA[36:48]]> 
     </length> 
    </item> 
    <item> 
     <asset>140705</asset> 
     <date>Jan 01, 2000</date> 
     <artist> 
     <![CDATA[John Nunes]]> 
     </artist> 
     <album> 
     <![CDATA[Educator of the Year]]> 
     </album> 
     <url> 
     <![CDATA[http://web2.puc.edu/Departments/Media_Services/file/2015/2015-4-2LloydBest.mp3]]> 
     </url> 
     <length> 
     <![CDATA[40:46]]> 
     </length> 
    </item> 
    </group> 
    <group name="Heubach Lectureship Series"> 
    <item> 
     <asset>48041</asset> 
     <date>Mar 07, 2009</date> 
     <artist> 
     <![CDATA[Barry C. Black, United States Senate Chaplain]]> 
     </artist> 
     <album> 
     <![CDATA[Heubach Lecture]]> 
     </album> 
     <url> 
     <![CDATA[http://web2.puc.edu/Departments/Media_Services/file/2009/HeubachLecture030709.mp3]]> 
     </url> 
     <length> 
     <![CDATA[1:12:57]]> 
     </length> 
    </item> 
    </group> 
</body> 

Итак, ниже мой корневой элемент У меня есть узлы группы, которые, как массивы, так как они содержат запись узлы. Мне нужно получить узлы элементов, чтобы получить их данные. Вот что я придумал до сих пор, но я до сих пор не знает, куда идти дальше:

URLConnection urlConnection = url.openConnection(); 
InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(in); 

NodeList categoryList = doc.getElementsByTagName("group"); 
for (int categoryNo=0; categoryNo<categoryList.getLength(); categoryNo++) { 

    //Element categoryNode = (Element)categoryList.item(categoryNo); 

    Node node = categoryList.item(categoryNo); 
    NodeList childNodes = categoryList.item(categoryNo).getChildNodes(); 
    for (int childNo = 0; childNo < childNodes.getLength(); childNo++) { 

     Node childNode = childNodes.item(childNo); 
     if (childNode.getNodeType() == Node.ELEMENT_NODE) { 
      Element elem = (Element) childNode; 

      Log.d(elem.getNodeValue(), "Zed"); 
     } 


    } 

} 

Любых намеки о том, как получить эти узлы записи, такие как актив, исполнитель, альбом, и т.д.?

ответ

1

Поскольку elem соответствует item элемента в XML, вы можете получить дочерний элемент с помощью Element#getElementsByTagName(String elementName), подобное тому, что вы делаете, чтобы получить group элементы. Затем вы можете получить содержимое элемента с помощью Node#getTextContent(). Например:

Element elem = (Element) childNode; 
NodeList assetNodes = elem.getElementsByTagName("asset"); 
if(assetNodes.getLength() > 0) { 
    // get the text content of the first node 
    String asset = assetNodes.item(0).getTextContent(); 
    ... 
} 
+0

Спасибо, что сработало! Теперь, как я могу получить атрибут «name» для каждого группового узла? –

+0

@NicHubbard См. [Документация по API] (https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/package-summary.html). Вы можете получить значение атрибута с помощью узла '((Element)) .getAttribute (" name ")' – manouti

Смежные вопросы