2012-08-16 2 views
1

Я пытаюсь проанализировать XML-файл, который имеет форму.Анализ атрибутов метаданных XML-файла в java

<parent tag> 
    <child tag> 
     <element key="property1">value</element> 
     <element key="property2">value</element> 
    </child tag> 
</parent tag> 

Как я могу получить значение element тега, имеющего property1? Мой код выглядит следующим образом.

public static ArrayList<String> parseXML(URL url_str,URLConnection conn_str,String root_tag,String child_tag) throws ParserConfigurationException, SAXException, IOException 
{ 
    String s = null; 
    ArrayList <String> List_value=new ArrayList<String>();  
    DocumentBuilderFactory dbF = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbF.newDocumentBuilder(); 
    Document doc = dBuilder.parse(conn_str.getInputStream()); 
    doc.getDocumentElement().normalize(); 
    System.out.println("Root : "+doc.getDocumentElement()); 
    System.out.println("****************"); 
    NodeList nList= doc.getElementsByTagName(root_tag); 
    System.out.println("****************"); 

    for (int i = 0; i < nList.getLength(); i++) { 
     Node node = nList.item(i); 
     if (node.getNodeType() == Node.ELEMENT_NODE) { 
      Element element = (Element) node; 
      NodeList nodelist1 = element.getElementsByTagName(child_tag); 
      for (int i1 = 0; i1 < nodelist1.getLength(); i1++) 
      { 
       Element element1 = (Element) nodelist1.item(i1); 
       NodeList fstNm = element1.getChildNodes(); 
       s=fstNm.item(0).getNodeValue(); 

       List_value.add(s); 
      } 
      for(int c=0;c<List_value.size();c++) 
      { 
        System.out.println(List_value.get(c)); 
      } 

     } 

    } 
    return List_value; 
} 

Я использую парсер DOM для того же. Незлая помощь.

спасибо.

+0

Укажите, пожалуйста, xml, который вы пытаетесь проанализировать. –

+0

XML-файл формы Я пытаюсь проанализировать XML-файл, который имеет форму. <элемент ключ = "property1"> значение <ключевой элемент = "свойство2"> Значение Как я могу получить значение тега элемента, имеющего property1? Я использую парсер DOM для того же. Просьба помочь. Спасибо. – Soham

+0

Что-то не так с буфером обмена. Это не вопрос, как я набрал. – Soham

ответ

3

Это сделало работу здесь (DOM + XPath), больше документации здесь: http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

Вот хорошее объяснение о XPath и как это работает: http://www.xmlplease.com/axis

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 


public class XmlParseTest { 
    public static void main(String[] args) throws Exception { 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse("test.xml"); 

     XPathFactory xpathFactory = XPathFactory.newInstance(); 
     XPath xpath = xpathFactory.newXPath(); 
     XPathExpression expr = xpath.compile("//element[@key='property1']/text()"); 
     Object result = expr.evaluate(doc, XPathConstants.NODESET); 

     NodeList nodes = (NodeList) result; 
     for (int i = 0; i < nodes.getLength(); i++) { 
      System.out.println(nodes.item(i).getNodeValue()); 
     } 
    } 
}  
+0

это именно то, что я искал .. Спасибо .. :) – Soham

+0

Какой файл jar мне нужно включить в classpath для реализации XPath? – Soham

+1

Нет, его часть стандартного Oracle/Sun JDK, не забудьте добавить импорт :) –

1

"An Introduction to APIs for XML Processing" будет хорошей отправной точкой для начала изучения XML разбора в Java

+0

Код, который я написал, возвращает только значения дочернего тега. Но я понятия не имею, как получить атрибуты тегов. – Soham

+0

@Soham: Отправьте код и давайте посмотрим :) – Sujay

+0

мой код здесь не подходит .. :( – Soham

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