Java - анализ строки XML с переменными тэгами? - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь разобрать строку XML, а тэги являются переменными;Я не видел примеров того, как вытащить информацию, не зная их.Например, я всегда буду знать теги <response> и <data> ниже, но то, что находится внутри или снаружи них, может быть любым, от <employee> до вашего имени.

    <?xml version="1.0" encoding="UTF-8"?>

     <response> 
        <generic>
           ....
        </generic>   
        <data>
             <employee>
                <name>Seagull</name>
                <id>3674</id>
                <age>34</age>
             </employee>
             <employee>
                <name>Robin</name>
                <id>3675</id>
                <age>25</age>
             </employee>
       </data>
   </response>

Ответы [ 2 ]

0 голосов
/ 15 декабря 2010

Я видел похожую ситуацию в проектах.

Если вы собираетесь работать с большими XML, вы можете использовать синтаксический анализатор Stax или Sax для чтения XML.На каждом шаге (например, при достижении конечного элемента) вводите данные в карту или структуру dta по вашему выбору, где вы сохраняете имена тегов в качестве ключа и значение в качестве значения на карте.Наконец, когда вы закончите анализ, используйте эту Карту, чтобы выяснить, какой объект построить, и, наконец, у вас будет правильное представление сущности информации в XML

Если XML невелик, используйте DOM и создайте непосредственнообъект-сущность, читая конкретный тег (например, employee> или используя XPATh там, где вы ожидаете присутствия тега, давая вам подсказку о сущности. Создайте этот объект напрямую, читая конкретную информацию из XML.

0 голосов
/ 15 декабря 2010

Вы можете разобрать его в общий объект dom и пройти по нему.Например, вы можете использовать dom4j для этого.

Из краткого руководства dom4j:

public void treeWalk(Document document) {
    treeWalk( document.getRootElement() );
}

public void treeWalk(Element element) {
    for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
        Node node = element.node(i);
        if ( node instanceof Element ) {
            treeWalk( (Element) node );
        }
        else {
            // do something....
        }
    }
}

public Document parse(URL url) throws DocumentException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(url);
    return document;
}
...