Ява Stax получить строку внутреннего узла - PullRequest
2 голосов
/ 11 ноября 2010

Я использую java stax XMLStreamReader для чтения XML. Я хочу получить всю строку определенных внутренних узлов.

XML:

<example>
   <ignoreMe>
      <bla></bla>
   </ignoreMe>
   <getMe>
      <data></data>
   </getMe>
</example>

Я просто хочу иметь возможность получить весь внутренний узел getMe в строке. IE:

   <getMe>
      <data></data>
   </getMe>

Вот что у меня есть .. но я застрял:

XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next();  
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {

    switch (event) {
    case XMLStreamConstants.START_ELEMENT:
        if (parser.getLocalName().equals("GetMe")) {
             //??????????????????

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Я начал изучать StaX на прошлой неделе, но если вы все еще ищете ответ на свою проблему, это может помочь вам:

    XMLInputFactory xmlif = XMLInputFactory.newInstance();
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
    XMLStreamReader xmlsr;
    String resultat="";
    boolean isGetme=false;

    try {
        xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
        int eventType;
        while (xmlsr.hasNext()) {
            eventType = xmlsr.next();
            switch (eventType) {
                case XMLStreamConstants.START_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        isGetme=true;
                    }
                    if(isGetme){
                        resultat+="<"+xmlsr.getLocalName()+">";
                    }
                    break;
                case XMLStreamConstants.CHARACTERS:
                    if(isGetme){
                        resultat+=xmlsr.getText();
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                        isGetme=false;
                    }
                    if(isGetme && !xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                    }
                    break;
                default:
                    break;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    System.out.println(resultat);

Этот код даст вам все внутренние узлы и текстовое содержимое,и сохранить его в строку.IE:

<getMe>
      <data>test</data>
</getMe>

Однако этот код довольно «уродлив» и, безусловно, не является лучшим решением для того, что вы ищете, JDOM может быть более подходящим для ваших нужд.

2 голосов
/ 11 ноября 2010

Чек это

проверьте метод parser.getElementText ()

НТН

Это даст вам внутренний текст, вы можете добавить начальное и конечное имя вручную обычным способом. А поскольку XML является строгим стандартом, у вас все в порядке.

...