Как получить узел из xml, не зная его уровня в Java - PullRequest
3 голосов
/ 21 июля 2011

У нас есть такая древовидная структура:

<Tree>
   <child1>
         <child2>
         <child2>
   </child1>
</Tree>

Здесь child2 может быть на любом уровне.Есть ли какой-нибудь способ, которым мы можем получить доступ к child2, не зная иерархии?

Спасибо за все ответы ... Есть ли какой-нибудь способ в Castor? Так как мы используем Castor для сортировки и отмены сортировки

Вот еще один тип вопросов: Как получить узел из xml, не зная его уровня в flex?

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Используя XPath, вы можете сделать это примерно так:

XPath xpath = XPathFactory.newInstance().newXPath();
NodeList child2Nodes= (NodeList) xpath.evaluate("//child2", doc, 
    XPathConstants.NODESET);

Где doc - ваш класс org.w3c.dom.Document.

2 голосов
/ 21 июля 2011

Используйте XPath для получения узлов.
// child2 - получить список всех элементов child2

1 голос
/ 21 июля 2011

Если вы можете использовать SAX-парсер, чем это легко, ваш ContentHandler

public class CH extends DefaultHandler
{
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
    {
      if (qName.equals("child2"))
      {
          // here you go do what you need here with the attributes 
      }
    }
}

передает его парсеру, и все готово

как

import org.xml.sax.*;

public class TestParse {

  public static void main(String[] args) {
    try {
      XMLReader parser = 
          org.xml.sax.helpers.XMLReaderFactory.createXMLReader();

      // Create a new instance and register it with the parser
      ContentHandler contentHandler = new CH();
      parser.setContentHandler(contentHandler);

      parser.parse("foo.xml"); // see javadoc you can give it a string or stream 
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...