- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import java.io.IOException;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import buildingInfo.Level;
public class XmlParser {
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Vector<Level> vLvl = new Vector<Level>(30);
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("C:\\Users\\BeatriceGhetel\\workspace\\IPProject\\src\\configuration\\Configure.xml");
NodeList itemList = doc.getElementsByTagName("LEVEL");
for (int i = 0; i < itemList.getLength(); i++) {
Node it = itemList.item(i);
if (it.getNodeType()==Node.ELEMENT_NODE) {
Element el = (Element) it;
NodeList L = el.getChildNodes();
for (int j=0; j< L.getLength(); j++) {
Node n = L.item(j);
if (n.getNodeType()==Node.ELEMENT_NODE) {
buildingInfo.Level Lvl = new BuildingInfo.Level();
if (n.getNodeName().matches("HEIGHT")) {
Lvl.Height = Float.parseFloat(n.getTextContent());
}
System.out.println(Lvl.Height + " inaltime nivel");
Element e = (Element) n;
}
}
}
}
} catch (Exception ex){
ex.printStackTrace();
}
}
}
<BUILDING>
<LEVEL>
<LABEL> 0 </LABEL>
<HEIGHT> 2.5 </HEIGHT>
<WIDTH> 9 </WIDTH>
<LENGHT> 8 </LENGHT>
<CAPACITY> 120 </CAPACITY>
<ROOM>
<LABEL> 1 </LABEL>
<TYPE> NORMALROOM </TYPE>
<HEIGHT> 2.5 </HEIGHT>
<WIDTH> 5 </WIDTH>
<LENGTH> 5 </LENGTH>
<CAPACITY> 40 </CAPACITY>
<SPRINKLER> YES </SPRINKLER>
<SMOKEDETECTOR> YES </SMOKEDETECTOR>
<EXTINGUISHERNUMBER> 2 </EXTINGUISHERNUMBER>
<DOORNUMBER> 1 </DOORNUMBER>
<DOOR>
<ID> 1 </ID>
<TYPE > EXTERNAL </TYPE >
<CAPACITY> 2 </CAPACITY>
<POSITION> NORTH </POSITION>
</DOOR>
</ROOM>
我尝试创建一个建筑模型,从配置的 XML 文档中获取属性。我遇到的问题是,我无法区分房间的高度或门的高度,而且它也不总是采用高度,有时会采用其他值,例如长度而不是高度。我还需要弄清楚如何创建房间集合,以及如何为门等嵌套项目创建对象。
最佳答案
JAXB 是解析 XML 对象的最简单方法之一。只需定义 java 类结构来匹配 XML 结构即可发挥神奇作用。它还以更简单的方式支持集合(XML 元素数组)。我已经开发了代码来解析给定的 XML(稍微更改了 XML 以显示如何处理关卡/房间/门中的集合)。希望对您有帮助。
XML 文件 - Base.xml
<?xml version="1.0" encoding="UTF-8"?>
<BUILDING>
<LEVEL>
<LABEL>0</LABEL>
<HEIGHT>2.5</HEIGHT>
<WIDTH>9</WIDTH>
<LENGHT>8</LENGHT>
<CAPACITY>120</CAPACITY>
<ROOM>
<LABEL>1</LABEL>
<TYPE>NORMALROOM</TYPE>
<HEIGHT>2.5</HEIGHT>
<WIDTH>5</WIDTH>
<LENGTH>5</LENGTH>
<CAPACITY>40</CAPACITY>
<SPRINKLER>YES</SPRINKLER>
<SMOKEDETECTOR>YES</SMOKEDETECTOR>
<EXTINGUISHERNUMBER>2</EXTINGUISHERNUMBER>
<DOORNUMBER>1</DOORNUMBER>
<DOOR>
<ID>1</ID>
<TYPE>EXTERNAL</TYPE>
<CAPACITY>2</CAPACITY>
<POSITION>NORTH</POSITION>
</DOOR>
<DOOR>
<ID>2</ID>
<TYPE>EXTERNAL</TYPE>
<CAPACITY>1</CAPACITY>
<POSITION>SOUTH</POSITION>
</DOOR>
</ROOM>
<ROOM>
<LABEL>2</LABEL>
<TYPE>DELUXEROOM</TYPE>
<HEIGHT>2.5</HEIGHT>
<WIDTH>5</WIDTH>
<LENGTH>5</LENGTH>
<CAPACITY>80</CAPACITY>
<SPRINKLER>YES</SPRINKLER>
<SMOKEDETECTOR>YES</SMOKEDETECTOR>
<EXTINGUISHERNUMBER>2</EXTINGUISHERNUMBER>
<DOORNUMBER>1</DOORNUMBER>
<DOOR>
<ID>3</ID>
<TYPE>EXTERNAL</TYPE>
<CAPACITY>2</CAPACITY>
<POSITION>NORTH</POSITION>
</DOOR>
<DOOR>
<ID>4</ID>
<TYPE>EXTERNAL</TYPE>
<CAPACITY>1</CAPACITY>
<POSITION>SOUTH</POSITION>
</DOOR>
</ROOM>
</LEVEL>
</BUILDING>
Building.java
@XmlRootElement(name = "BUILDING")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({ Level.class })
public class Building {
@XmlElement(name = "LEVEL")
private Level levels[];
public Level[] getLevels() {
return levels;
}
public void setLevels(Level[] levels) {
this.levels = levels;
}
@Override
public String toString() {
return "Building [levels=" + Arrays.toString(levels) + "]";
}
}
Door.java
@XmlRootElement(name = "DOOR")
@XmlAccessorType(XmlAccessType.FIELD)
public class Door {
@XmlElement(name="ID")
private String id;
@XmlElement(name="TYPE")
private String type;
@XmlElement(name="CAPACITY")
private String capacity;
@XmlElement(name="POSITION")
private String position;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCapacity() {
return capacity;
}
public void setCapacity(String capacity) {
this.capacity = capacity;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Door [id=" + id + ", type=" + type + ", capacity=" + capacity
+ ", position=" + position + "]";
}
}
Level.java
@XmlRootElement(name="LEVEL")
@XmlSeeAlso({Room.class})
@XmlAccessorType(XmlAccessType.FIELD)
public class Level {
@XmlElement(name="LABEL")
private String Label;
@XmlElement(name="HEIGHT")
private String Height;
@XmlElement(name="ROOM")
private Room rooms[];
public Room[] getRoom() {
return rooms;
}
public void setRoom(Room[] room) {
this.rooms = room;
}
public String getLabel() {
return Label;
}
public void setLabel(String label) {
Label = label;
}
public String getHeight() {
return Height;
}
public void setHeight(String height) {
Height = height;
}
@Override
public String toString() {
return "Level [Label=" + Label + ", Height=" + Height + ", rooms="
+ Arrays.toString(rooms) + "]";
}
}
JAXBParser.java
public class JAXBParser {
public static void main(String args[]) throws JAXBException{
File file = new File("C:\\XMLParserDemo\\src\\Base.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Building.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Building building = (Building) jaxbUnmarshaller.unmarshal(file);
System.out.println(building);
}
Room.java
@XmlRootElement(name="ROOM")
@XmlSeeAlso({Door.class})
@XmlAccessorType(XmlAccessType.FIELD)
public class Room {
@XmlElement(name="LABEL")
private String label;
@XmlElement(name="TYPE")
private String type;
@XmlElement(name="HEIGHT")
private String height;
@XmlElement(name="WIDTH")
private String width;
@XmlElement(name="LENGTH")
private String length;
@XmlElement(name="CAPACITY")
private String capacity;
@XmlElement(name="SPRINKLER")
private String sprinkler;
@XmlElement(name="SMOKEDETECTOR")
private String smokeDet;
@XmlElement(name="EXTINGUISHERNUMBER")
private String extNum;
@XmlElement(name="DOORNUMBER")
private String doorNumber;
@XmlElement(name="DOOR")
Door doors[];
public Door[] getDoor() {
return doors;
}
public void setDoor(Door[] door) {
this.doors = door;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getWidth() {
return width;
}
public void setWidth(String width) {
this.width = width;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getCapacity() {
return capacity;
}
public void setCapacity(String capacity) {
this.capacity = capacity;
}
public String getSprinkler() {
return sprinkler;
}
public void setSprinkler(String sprinkler) {
this.sprinkler = sprinkler;
}
public String getSmokeDet() {
return smokeDet;
}
public void setSmokeDet(String smokeDet) {
this.smokeDet = smokeDet;
}
public String getExtNum() {
return extNum;
}
public void setExtNum(String extNum) {
this.extNum = extNum;
}
public String getDoorNumber() {
return doorNumber;
}
public void setDoorNumber(String doorNumber) {
this.doorNumber = doorNumber;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Room [label=" + label + ", type=" + type + ", height=" + height
+ ", width=" + width + ", length=" + length + ", capacity="
+ capacity + ", sprinkler=" + sprinkler + ", smokeDet="
+ smokeDet + ", extNum=" + extNum + ", doorNumber="
+ doorNumber + ", doors=" + Arrays.toString(doors) + "]";
}
}
关于java - 使用 XML 文档 Java 的属性创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104399/
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!