【问题标题】:find xml node based on content根据内容查找xml节点
【发布时间】:2013-11-26 03:15:14
【问题描述】:

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

【问题讨论】:

    标签: java xml-parsing saxparser


    【解决方案1】:

    在 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));
        }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试这个代码..

        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");
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2021-04-23
          • 1970-01-01
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-13
          • 2014-02-13
          相关资源
          最近更新 更多