在java中解析xml-多个子元素
我想用java解析xml元素。我在某些方面取得了成功…但不确定如何做rest..我有xml作为在java中解析xml-多个子元素,java,xml,parsing,Java,Xml,Parsing,我想用java解析xml元素。我在某些方面取得了成功…但不确定如何做rest..我有xml作为 <MainTag> <userid>user1</userid> <country>US</country> <city>LA</city> <phone> <number>1111111111</number
<MainTag>
<userid>user1</userid>
<country>US</country>
<city>LA</city>
<phone>
<number>1111111111</number>
</phone>
<phone>
<number>222222222</number>
</phone>
</MainTag>
<MainTag>
<userid>user2</userid>
<country>Aus</country>
<city>MB</city>
<phone>
<number>23233</number>
</phone>
<phone>
<number>8787822</number>
</phone>
<phone>
<number>10101</number>
</phone>
但是如果是电话,我怎么能解析它呢?因为一个用户有多个电话号码
我想为特定用户找到多个电话号码
例如,在上述xml中
对于user1,有两个电话号码。
对于user2,有三个电话号码
有人能帮忙吗?提前感谢。首先,这不是格式良好的XML(因为它有两个根元素),除非格式良好,否则无法使用任何解析器API对其进行解析。现在,要解析XML,您通常会使用SAX、DOM或StAX之类的API,或者更好的JAXB绑定API
既然你对这一点似乎还不熟悉,我建议你开始学习。使用StAX而不是DOM或SAX。我建议使用JAXB,因为您似乎正在尝试将xml绑定到POJO
查看您在这里编写的代码(假设您提供的示例xml是格式良好的xml片段),我想您的
pojo
对象应该有一个电话号码的成员,类型为List
,您的pojo应该有一个方法,允许您将电话号码添加到列表
(也许addPhoneNumber(String phoneNumber){…}
)如果您知道传入的xml格式,例如它有多少个节点和名称,您可以使用DocumetBuilderFactory java默认类查看此代码
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//documentBuilder instance
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("employees.xml");
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch(SAXException se) {
se.printStackTrace();
}catch(IOException ioe) {
ioe.printStackTrace();
}
//然后得到根元素
Element de= dom.getDocumentElement();
//获取主元素的节点列表
NodeList nl = de.getElementsByTagName("Employee");
if(nl != null && nl.getLength() > 0) {
for(int i = 0 ; i < nl.getLength();i++) {
//get the employee element
Element el = (Element)nl.item(i);
}
}
NodeList nl=de.getElementsByTagName(“员工”);
如果(nl!=null&&nl.getLength()>0){
对于(int i=0;i
//然后获取数据
private void getEmployee(Element el) {
//for each <employee> element get values
String name = getTextValue(el,"Name");
int id = getIntValue(el,"Id");
int age = getIntValue(el,"Age");
//get any element attribute
//String type = el.getAttribute("type");
}
private void getEmployee(元素el){
//为每个元素获取值
String name=getTextValue(el,“name”);
int id=getIntValue(el,“id”);
int age=getIntValue(el,“年龄”);
//获取任何元素属性
//字符串类型=el.getAttribute(“类型”);
}
仅此而已如果您正在使用SAX解析,请添加SAX标记,因为我不确定您是如何解析此xml的。它的格式不好,因为它有两个根元素。如果要将XML转换为Java对象,是否考虑过使用JAXB?使用JAXB(JSR-222)不需要XML模式:@BlaiseDoughan,不需要元数据,我认为可以从POJO->XML开始。相反,JAXB可以在没有任何注释的情况下解组XML,只要您指定要将XML解组的类。您还可以将JAXB注释添加到现有的Java类中,不需要从XML模式生成它们。@BlaiseDoughan从post中删除了错误的信息。这是我展示的一些示例xml。实际上我的要求是…我想把用户信息和他的电话号码一起存入数据库。user1有2个电话号码user2有3个电话号码。我不知道正确的电话号码会对正确的用户产生什么样的影响。我正在使用saxparser…所以请建议我如何处理sax解析器?是的,我认为你是对的。我需要在我的pojo中有say List phoneList。我可以像phoneLis.add(PhoneNos)一样添加到其中;但我的问题是如何识别特定用户的特定电话号码?听起来一个用户可能有多个电话号码。他们中的任何人都应该工作。
private void getEmployee(Element el) {
//for each <employee> element get values
String name = getTextValue(el,"Name");
int id = getIntValue(el,"Id");
int age = getIntValue(el,"Age");
//get any element attribute
//String type = el.getAttribute("type");
}