Xml没有使用sax解析String作为输入 [英] Xml not parsing String as input with sax

查看:164
本文介绍了Xml没有使用sax解析String作为输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字符串输入,我需要从中提取简单信息,这里是示例xml(来自mkyong):

I have a string input from which I need to extract simple information, here is the sample xml (from mkyong):

<?xml version="1.0"?>
<company>
    <staff>
        <firstname>yong</firstname>
        <lastname>mook kim</lastname>
        <nickname>mkyong</nickname>
        <salary>100000</salary>
    </staff>
    <staff>
        <firstname>low</firstname>
        <lastname>yin fong</lastname>
        <nickname>fong fong</nickname>
        <salary>200000</salary>
    </staff>
</company>

我如何在我的代码中解析它(我有一个字段字符串名称在我班上):

How I parse it within my code (I have a field String name in my class) :

public String getNameFromXml(String xml) {
        try {

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            DefaultHandler handler = new DefaultHandler() {

                boolean firstName = false;

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

                    if (qName.equalsIgnoreCase("firstname")) {
                        firstName = true;
                    }
                }

                public void characters(char ch[], int start, int length) throws SAXException {

                    if (firstName) {
                        name = new String(ch, start, length);
                        System.out.println("First name is : " + name);
                        firstName = false;
                    }

                }

            };

            saxParser.parse(xml.toString(), handler);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return name;
    }

我收到 java.io.FileNotFoundException 我发现它正在尝试查找文件 myprojectpath + wholeStringXML

I'm getting a java.io.FileNotFoundException and I see that it's trying to find a file myprojectpath + the entireStringXML

什么我做错了吗?

Addon:

这是我的主要方法:

public static void main(String[] args) {
        Text tst = new Text("<?xml version=\"1.0\"?><company>   <staff>     <firstname>yong</firstname>     <lastname>mook kim</lastname>       <nickname>mkyong</nickname>     <salary>100000</salary> </staff>    <staff>     <firstname>low</firstname>      <lastname>yin fong</lastname>       <nickname>fong fong</nickname>      <salary>200000</salary> </staff></company>");
        NameFilter cc = new NameFilter();
        String result = cc.getNameFromXml(tst);
        System.out.println(result);
    }


推荐答案

你应该替换 saxParser.parse(xml.toString(),handler); 包含以下内容:

You should replace the line saxParser.parse(xml.toString(), handler); with the following one:

saxParser.parse(new InputSource(new StringReader(xml)), handler);

这篇关于Xml没有使用sax解析String作为输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆