我已经摆弄了3个小时,我无法让这个F *****解析器工作。抱歉诅咒。 我不明白为什么我找不到那些我想要的一个体面的教程。
我只想发送一个String / XML函数。然后,解析它。这并不难。在python中,我可以闭着眼睛去做。这里有令人敬畏的,令人讨厌的文档:http://www.crummy.com/software/BeautifulSoup/documentation.html
import BeautifulSoup
soup = BeautifulSoup(the_xml)
persons_name = soup.findAll('first_name')[0].string
为什么我找不到一个好的,简单的文档来教我如何解析XML ?????这是我目前的JAVA SAX代码,它不起作用,我甚至不知道为什么。
public static void parseit(String thexml)
{
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
saxParser.parse( thexml , new DefaultHandler() );
} catch (Throwable err) {
err.printStackTrace ();
}
}
有人可以给我写代码来解析使用SAX解析器的XML ...请...它就像5行代码。
答案 0 :(得分:3)
您必须扩展默认处理程序DefaultHandler。例如,试试这个:
saxParser.parse( new InputSource(new StringReader(thexml)) , new DefaultHandler()
{
public void startElement(String uri, String localName, String qName, Attributes attributes)
{
System.out.println("Hello "+qName);
}
});
答案 1 :(得分:3)
好的,所以您需要做的是实现自己的处理程序(而不是使用默认处理程序)。所以替换
saxParser.parse( thexml , new DefaultHandler() );
与
saxParser.parse( thexml , new MyFreakingHandler() );
其中MyFreakingHandler实现接口HandlerBase,或者它可以扩展DefaultHandler类。然后简单地为诸如
之类的方法提供实现public void startDocument () throws SAXException
public void endElement (String name) throws SAXException
我不知道为什么你在网上找不到任何教程。我至少已经使用SAXParser至少3年了,为了回复你的帖子,我只是向Google寻求帮助。
编辑:
好的,这样可以解决问题。曾经有一个SAX的官方Java教程,我现在无法在网上找到,但是仍有许多不错的非官方教程可以提供很多帮助。例如,尝试使用此功能:http://www.java-samples.com/showtutorial.php?tutorialid=152
答案 2 :(得分:2)
您必须使用自己的实现扩展DefaultHandler。如果您使用大型文档,则sax解析器很好。如果没有,您可能最好使用另一个xml解析器,例如dom4j。
这是一个简单的sax tutorial
答案 3 :(得分:0)
我不知道这是否适合您,但是由于Groovy和Java一起玩得很好,为什么不尝试使用Groovy options之一来处理XML。
特别要看XML Slurper(http://groovy.codehaus.org/Reading+XML+using+Groovy's+XmlSlurper
)
def records = new XmlSlurper().parseText(thexml)
def persons_name = records.first_name[0]
在我看来,这与您以Java兼容的方式获得BeautifulSoup一样接近。
答案 4 :(得分:0)
使用Java XPath API
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
XPathExpression xPathExpression = xPath.compile("//first_name");
NodeList nodes = (NodeList) xPathExpression.evaluate(
new InputSource(new FileInputStream(the_xml)), XPathConstants.NODESET);
是的,这是不必要的冗长。