2013-11-13 2 views
1

Я хочу проанализировать XML с помощью SAX-Parser и найти узел, содержащий специальный контент.найти узел xml на основе содержимого

Пример XML:

<root> 
    <someElement> 
      #hashKey1 
    </someElement> 
    <someElement> 
      value1 
    </someElement> 
    <someElement> 
      #hashKey2 
    </someElement> 
    <someElement> 
      value2 
    </someElement> 
    <someElement> 
      #hashKey3 
    </someElement> 
    <someElement> 
      value3 
    </someElement> 
</root> 

Проблема заключается в том, что я не знаю, какой узел/элемент оно, где мое содержание находится в я просто хочу, чтобы найти первый элемент/узел, который. содержит мое содержание.

Должен ли я написать свою собственную функцию «findNodeByContent» или есть реализация SAX-Parser, которая предлагает такую ​​функцию?

ответ

1

Вам нужно будет создать свой собственный метод, который будет проходить через узлы. Если я ошибаюсь, нет метода DOM, такого как getElementByValue.

2

Используйте поддержку Xpath в JDK вместо SAX. Вы можете найти элемент с этим выражением

//*[contains(text(), 'value2')] 

Он найдет все элементы, которые имеют текстовый узел, содержащий текст «value2».

Вот некоторые примеры кода:

XPath p = XPathFactory.newInstance().newXPath(); 
    InputSource in = new InputSource(...); 
    NodeList list = (NodeList) p.evaluate("//*[contains(text(), 'value2')]", in, XPathConstants.NODESET); 
    for(int i=0; i < list.getLength(); ++i) { 
     System.out.println(list.item(i)); 
    } 
1

попробовать с этим кодом ..

public class SaxParser extends DefaultHandler { 
    public void parse(String xmlName) throws ParserConfigurationException, 
      SAXException, IOException { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     SAXParser saxParser = factory.newSAXParser(); 
     SaxParser parser = new SaxParser(); 
     saxParser.parse("src/test.xml", parser); 

    } 

    public void characters(char[] buffer, int start, int length) { 
     String text = new String(buffer, start, length); 
     System.out.println(text); 
     if(text.trim().equals("your value")){ 
      // your action 
     } 
    } 

    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) { 
    } 

    public void endElement(String uri, String localName, String qName) { 

    } 

    public static void main(String[] a) throws ParserConfigurationException, 
      SAXException, IOException { 
     new SaxParser().parse("src/test.xml"); 
    } 

}