我想用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实现?
答案 0 :(得分: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));
}
答案 1 :(得分:1)
您必须创建自己的循环节点的方法。除非我错了,否则没有像getElementByValue这样的DOM方法。
答案 2 :(得分: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");
}
}