java - 解析具有多个属性的 XML 以列出

标签 java xml jaxb

我有一个像这样的 XMl 文件:

<?xml version="1.0" encoding="UTF-8"?>
<subtests>
        <subtest id="Detect" name="Device detection" />
        <subtest id="DeviceType" name="Device type" />
        <subtest id="VendorName" name="Vendor" />
        <subtest id="VendorModelName" name="Vendor model name" />
        <subtest id="ModelName" name="Customer model name" />
        <subtest id="Serial" name="Serial number" />
        <subtest id="getScannedSerial" name="Scanned serial number value" />
        <subtest id="ScannedSerial" name="Scanned serial number" />
        <subtest id="FirmwareVersion" name="Software version" />
        <subtest id="IR_C" name="IR_C" customer="Rogers" />
        <subtest id="EchoDct" name="Echo_DCT" customer="Rogers" />
        <subtest id="FirmwareValidation" name="Firmware validation" />
</subtests>

我需要将其解析为Java列表。我需要获取“id”和“name”选项。所以我尝试创建一个这样的类,但出现错误:

@XmlRootElement(name="subtests")
public class Subtests {

    private List<Subtest> subtests;

    public List<Subtest> getSubtests() {
        return subtests;
    }

    @XmlElement ( name = "subtest" )
    public void setSubtests(List<Subtest> subtests) {
        this.subtests = subtests;
    }

    @Override
    public String toString() {
        return "Subtests [subtests=" + subtests + "]";
    }

} 

我如何解析该文件以获取该 XML 的属性?我有一个像这样的子测试类:

@XmlRootElement ( name = "subtest" )
public class Subtest {

    private String id;
    private String name;
    private String customer;

    @XmlAttribute ( name = "id", required = true )
    public String getId() {
        return id;
    }

    @XmlAttribute ( name = "name", required = true )
    public String getName() {
        return name;
    }

    @XmlAttribute ( name = "customer", required = true )
    public String getCustomer() {
        return customer;
    }


    public void setId(String id) {
        this.id = id;
    }


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


    public void setCustomer(String customer) {
        this.customer = customer;
    }

}

我需要从 XML 中获取此类对象的列表

最佳答案

使用DOM解析器获取属性

import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;



public class GetAttributes {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<subtests>\n" +
                "        <subtest id=\"Detect\" name=\"Device detection\" />\n" +
                "        <subtest id=\"DeviceType\" name=\"Device type\" />\n" +
                "        <subtest id=\"VendorName\" name=\"Vendor\" />\n" +
                "        <subtest id=\"VendorModelName\" name=\"Vendor model name\" />\n" +
                "        <subtest id=\"ModelName\" name=\"Customer model name\" />\n" +
                "        <subtest id=\"Serial\" name=\"Serial number\" />\n" +
                "        <subtest id=\"getScannedSerial\" name=\"Scanned serial number value\" />\n" +
                "        <subtest id=\"ScannedSerial\" name=\"Scanned serial number\" />\n" +
                "        <subtest id=\"FirmwareVersion\" name=\"Software version\" />\n" +
                "        <subtest id=\"IR_C\" name=\"IR_C\" customer=\"Rogers\" />\n" +
                "        <subtest id=\"EchoDct\" name=\"Echo_DCT\" customer=\"Rogers\" />\n" +
                "        <subtest id=\"FirmwareValidation\" name=\"Firmware validation\" />\n" +
                "</subtests>";


        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
        org.w3c.dom.Document doc = db.parse(bis);
        NodeList nodeList = doc.getElementsByTagName("subtest");
        for(int x=0,size= nodeList.getLength(); x<size; x++) 
        {
            System.out.println(nodeList.item(x).getAttributes().getNamedItem("id").getNodeValue()+ " ========== "+ nodeList.item(x).getAttributes().getNamedItem("name").getNodeValue());
        }



    }
}

关于java - 解析具有多个属性的 XML 以列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481485/

相关文章:

java - 如何将文本值存入数组?

java - 如何以编程方式从颜色名称获取 R-G-B 值

c# - .net 中的 XML 序列化

c# - 如何使用 linq to xml 创建多态数组?

java - 针对 XML 架构(XSD 文件)的通用 XML 文件 validator

java - 既可选又可为空的 JAXB 元素

java - 有没有办法管理存储在 Firestore 中的 POJO 类属性?

java - 在 GUI 中显示数组

c++ - 从文本文件读取以显示给多个联系人

java - MOXy 的解码不一致