gpt4 book ai didi

java - 如何在 jaxb 解码中检查 XML 中的整数字段是否具有字符串值

转载 作者:行者123 更新时间:2023-11-30 08:11:12 25 4
gpt4 key购买 nike

使用 JAXB 解码时,我必须检查 xml 中的整数字段中是否获取了字符串。

实现类:

import java.io.IOException;
import javax.xml.bind.JAXB;

public class JAXBDemo {
public static void main(String[] args) throws IOException {

try {
String xmlString = "file:///c:/xml/stud.xml";

// unmarshal XML string to class
Student st = JAXB.unmarshal(xmlString, Student.class);

// prints
System.out.println("Age : "+st.getAge());
System.out.println("Name : "+st.getName());

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

映射类:

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Student{

String name;
int age;
int id;

public String getName(){
return name;
}

@XmlElement
public void setName(String name){
this.name = name;
}

public int getAge(){
return age;
}

@XmlElement
public void setAge(int age){
this.age = age;
}

public int getId(){
return id;
}

@XmlAttribute
public void setId(int id){
this.id = id;
}
}

输入 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<student id="10">
<age>hello</age>
<name>Malik</name>
</student>

输出:

Age : 0
Name : Malik

当我在整数字段中给出字符串值时,它给出为零。我必须检查如何检查 xml 中具有非数值的整数字段并抛出错误。

最佳答案

JAXB 是一个便利类,包含 JAXBContextUnmarshaller 和其他 JAXB API 库,使执行简单操作变得更加容易。它的问题是,它并没有真正处理诸如验证模式和性能问题之类的问题。它会尝试“尽最大努力”并忽略不匹配数据字段的问题,例如 int 字段中的 String

为了避免这种情况,您必须直接使用 JAXB API,并在解码过程中验证架构。

我还没有测试过这段代码,但它应该与此类似:

JAXBContext jc = JAXBContext.newInstance(Student.class);
Unmarshaller u = jc.createUnmarshaller();
Student st = u.unmarshal(new File(xmlString));

您可能需要将解码显式转换为 Student,即:

Student st = (Student)u.unmarshal(new File(xmlString));

关于java - 如何在 jaxb 解码中检查 XML 中的整数字段是否具有字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com