1

我想用 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 实现?

4

3 回答 3

2

使用 JDK 中的 Xpath 支持而不是 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));
    }
于 2013-11-13T13:42:00.477 回答
1

您将必须创建自己的方法来循环节点。除非我错了,否则没有像 getElementByValue 这样的 DOM 方法。

于 2013-11-13T13:38:21.763 回答
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");
    }

}
于 2013-11-13T13:59:43.060 回答