java - 在具有特定参数的JAVA方法中从xml获取值

标签 java xml jaxb

我是 XML 解析方面的新手,并尝试了解 JAXB。有以下任务: 实现了如下方法,通过id参数获取személy对象,但返回null:

    public Személy getSzemélyById(String id) {

        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Személy.class);
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
        XMLReader xmlReader = spf.newSAXParser().getXMLReader();
        InputSource inputSource;
        inputSource = new InputSource(new FileReader("C:\\Users\\zbocskay.TS-EU\\Documents\\NetBeansProjects\\prt2014levzh\\people.xml"));
        SAXSource source = new SAXSource(xmlReader, inputSource);

        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        Személy személy = (Személy) unmarshaller.unmarshal(source);
        System.out.println(személy.toString());

        return new Személy(személy.getId(), személy.getVezetéknév(), személy.getKeresztnév(), személy.getÉletkor(), személy.getCím(), személy.státusz.DIÁK);
    } catch (JAXBException e) {
    } catch (FileNotFoundException | ParserConfigurationException ex) {
        Logger.getLogger(SzemélyDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXNotRecognizedException ex) {
        Logger.getLogger(SzemélyDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXNotSupportedException ex) {
        Logger.getLogger(SzemélyDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXException ex) {
        Logger.getLogger(SzemélyDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}

这是Személy 类:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Személy {

        public enum Státusz {
            FELNŐTT, DIÁK, NYUGDÍJAS, GYERMEK
        }

        @XmlElement
        protected String id;
        @XmlElement
        protected String vezetéknév;
        @XmlElement
        protected String keresztnév;

        protected Integer életkor;
        @XmlElement
        protected String cím;

        protected Státusz státusz;

        public Személy(String id) {
            super();
            this.id = id;
        }

        public void setÉletkor(Integer életkor) {
            this.életkor = életkor;
        }

        public String getVezetéknév() {
            return vezetéknév;
        }

        public void setVezetéknév(String vezetéknév) {
            this.vezetéknév = vezetéknév;
        }

        public String getKeresztnév() {
            return keresztnév;
        }

        public void setKeresztnév(String keresztnév) {
            this.keresztnév = keresztnév;
        }

        public String getCím() {
            return cím;
        }

        public void setCím(String cím) {
            this.cím = cím;
        }

        public String getId() {
            return id;
        }

        public Személy(String id, String vezetéknév, String keresztnév,
                Integer életkor, String cím, Státusz státusz) {
            this(id);
            this.vezetéknév = vezetéknév;
            this.keresztnév = keresztnév;
            this.életkor = életkor;
            this.cím = cím;
            this.státusz = státusz;
        }

        public Személy(String id, String vezetéknév, String keresztnév,
                String születésiDátum, String cím, String diákigazolványszám,
                Státusz státusz) throws ParseException {
            this(id);
            this.vezetéknév = vezetéknév;
            this.keresztnév = keresztnév;
            this.életkor = meghatározÉletkort(születésiDátum);
            this.cím = cím;
            this.státusz = státusz;
        }

        public Integer getÉletkor() {
            return életkor;
        }

        @Override
        public String toString() {
            return "Személy [id=" + id + ", vezetéknév=" + vezetéknév
                    + ", keresztnév=" + keresztnév + ", életkor=" + életkor
                    + ", cím=" + cím + ", státusz=" + státusz + "]";
        }

    }

以及包含数据的 people.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE személyek SYSTEM "people.dtd">

<személyek>
    <személy id="micimacko">
        <vezetéknév>Mici</vezetéknév>
        <keresztnév>Mackó</keresztnév>
        <születésidátum>1921.08.21</születésidátum>
        <cím>Százholdas Pagony</cím>
        <fotó>http://upload.wikimedia.org/wikipedia/en/1/10/Winniethepooh.png
        </fotó>
    </személy>
</személyek>

通过以下方式在主类中运行:

    public static void main(String args[]) {
    SzemélyDAO ddd = new SzemélyDAOImpl();
    System.out.println(ddd.getSzemélyById("micimacko"));
}

有人可以帮助我吗,我做错了什么?谢谢。

最佳答案

由于异常表明您需要向 Személy 类添加一个无参数构造函数。这意味着构造函数不带任何参数。目前,该类有一个采用 String 的构造函数。添加以下内容即可:

private Személy() {
}

关于java - 在具有特定参数的JAVA方法中从xml获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161121/

相关文章:

xml - 导入没有命名空间的 xsd

Java 调用由 GCC 编译的 C 库有效,但在使用 G++ 编译时失败

php - 使用 PHP 创建 XML 文件并将其保存到服务器

java - 无法使用 Jackson 处理 JAXB 注释

PHP - 处理无效的 XML

xml - pretty-print - Spark/Scala 中的 XML 单记录

java - XML 属性的 JAXB 解码问题

java - 分割字符串数组时如何转义正则表达式

java - java中的运行长度编码

java - 使用扫描仪的分隔符功能来查找 "abc-def"