[英]Not able to fetch the XML tag value in Java
我有一个简单的 xml 字符串
<Detail>
<firstname xmlns=""></firstname >
<lastname xmlns=""></lastname>
</Detail>
如果没有 xmlns="",我可以获取值,但是当 xmlns 属性出现时,它不返回值
这是我的代码
getTagValue(strResponse, "firstname ")
public static String getTagValue(String xml, String tagName){
return xml.split("<"+tagName+">")[1].split("</"+tagName+">")[0];
}
我怎样才能获得名字的价值。 我不想为这个单一元素使用 DocumentBuilder 类
我认为不显式解析 XML 文本的最简单方法是使用 JAXB,如下所示。 创建一个 Detail 类,该类只注释了要从输入 XML 加载的变量。
对于input.xml文件,它不仅包含名字和姓氏,还包含其他 XML 元素(如评论中所要求):
<?xml version="1.0" encoding="UTF-8"?>
<Detail>
<firstname>firstname</firstname>
<lastname>lastname</lastname>
<elementA>element A</elementA>
<elementB>element B</elementB>
<elementC>element C</elementC>
</Detail>
如果您有一个只有名字和姓氏注释的Detail类,如下所示:
package test;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "Detail")
@XmlType(propOrder = { "firstname", "lastname"})
public class Detail {
@XmlElement(name="firstname")
private String firstname;
@XmlElement(name="lastname")
private String lastname;
private String elementA = "default elementA";
private String elementB = "default elementB";
private String elementC = "default elementC";
public Detail(){}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getElementA() {
return elementA;
}
public void setElementA(String elementA) {
this.elementA = elementA;
}
public String getElementB() {
return elementB;
}
public void setElementB(String elementB) {
this.elementB = elementB;
}
public String getElementC() {
return elementC;
}
public void setElementC(String elementC) {
this.elementC = elementC;
}
}
还有一个jaxb.index文件,与编译的类位于同一文件夹中,其唯一内容是:
Detail
然后像这样测试输入 XML :
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class Test {
public static void main(String[] args) {
try{
JAXBContext jc = JAXBContext.newInstance(Detail.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("input.xml");
Detail detail = (Detail) unmarshaller.unmarshal(xml);
System.out.println("Detail firstname:"+detail.getFirstname()+" lastname:"+detail.getLastname());
}
catch(JAXBException e){
System.out.println(e.getMessage());
}
}
}
您将看到 Detail 仅从 XML 文件加载了名字和姓氏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.