2012-03-28 5 views
1

Чтобы получить доступ к значениям id1 & id2, итерируя все значения в XML, и если я найду тег с именем id1 или id2, я прочитаю его значение в переменной. Есть ли лучший способ считывания значений id1 & id2?Как получить доступ к значениям в XML

<begin> 
    <total>1</total> 
    <values> 
    <factor> 
     <base>test</base> 
     <id1>id1</id1> 
     <id2>id2</id2> 
     <val>val2</val> 
     <newval>val1</newval> 
    </factor> 
    </values> 
</begin> 
+0

, если все, что вы заинтересованы в запросе определенные элементы, [XPath] (http://www.ibm.com/developerworks/library/x-javaxpathapi /) - ваш друг –

ответ

1

Если вы используете XPath, вы можете извлекать значения непосредственно из объекта Document. В вашем случае XPath, чтобы добраться до id1, будет /begin/id1.

0

Я бы использовал любую библиотеку, которая поддерживает XPath. JDOM в настоящее время является мой любимым, но их там много.

1

Используйте синтаксический анализатор SAX и сохраните текст, испущенный после элемента запуска «id1», в качестве значения id1 и текста после элемента запуска «id2» в качестве значения id2.

Например:

public static List<String> getIds(InputStream xmlStream) throws ParserConfigurationException, SAXException, IOException { 
    final List<String> ids = new ArrayList<String>(); 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser saxParser = factory.newSAXParser(); 
    saxParser.parse(xmlStream, new DefaultHandler() { 
    boolean getChars = false; 
    public void startElement(String uri, String name, String qName, Attributes attrs) throws SAXException { 
     if ("id1".equalsIgnoreCase(qName)) getChars = true; 
     if ("id2".equalsIgnoreCase(qName)) getChars = true; 
    } 
    public void characters(char cs[], int start, int len) throws SAXException { 
     if (getChars) { 
     ids.add(new String(cs, start, len)); 
     getChars = false; 
     } 
    } 
    }); 
    return ids; 
} 
1

Вы можете использовать JDOM для этого:

import org.jdom.Document; 
import org.jdom.input.SAXBuilder; 

public class Test { 

    public static void main(String[] args) throws Exception{ 
     SAXBuilder builder = new SAXBuilder(); 
     Document doc = builder.build("test.xml"); 
     String id1 = doc.getRootElement().getChild("values").getChild("factor").getChild("id1").getValue(); 
     System.out.println(id1); 
     String id2 = doc.getRootElement().getChild("values").getChild("factor").getChild("id2").getValue(); 
     System.out.println(id2); 
    } 

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