繁体   English   中英

无法在 Java 中获取 XML 标记值

[英]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.in​​dex文件,与编译的类位于同一文件夹中,其唯一内容是:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM