我正在读取一个xml文件,其中包含Class的许多对象的属性;我正在使用DOM xml解析器;在这个类中还有一个数组字段(NEARBOXID),所以我想知道是否是一个很好的方法从xml文件中读取它像一个字符串然后拆分其内容,或者有更好的方法来做到这一点吗? / p>
文件是这样的:
<CONFIGURATION>
<CONFIG>
<BOXID>1</BOXID>
<LENGTH>100</LENGTH>
<NEARBOXID>2,3,4,5</NEARBOXID>
</CONFIG>
<CONFIG>
<BOXID>2</BOXID>
<LENGTH>200</LENGTH>
<NEARBOXID>1,8</NEARBOXID>
</CONFIG>
答案 0 :(得分:1)
你应该读作字符串并拆分它。使用循环使用ParseInt
答案 1 :(得分:1)
不,你可以分割那个领域。 String.split
方法就可以了。
答案 2 :(得分:1)
您需要使用XPath在所需代码中提取完整数据,然后使用String.split()
,从整个字符串中获取所需的值。
答案 3 :(得分:1)
由于您要将XML转换为Java对象,因此我将演示如何使用JAXB (JSR-222)实现来完成此操作。从Java SE 6开始,JDK / JRE中包含JAXB实现。
我建议将NEARBOXID
元素的内容更改为空格分隔。
<NEARBOXID>2 3 4 5</NEARBOXID>
对应于XML架构中的以下条目。这意味着您可以验证该元素是否包含空格分隔的int值而不是空格分隔的字符串。
<xs:element name="NEARBOXID" minOccurs="0">
<xs:simpleType>
<xs:list itemType="xs:int"/>
</xs:simpleType>
</xs:element>
<强>配置强>
然后你可以使用JAXB的@XmlList
注释来映射元素(参见:http://blog.bdoughan.com/2010/09/jaxb-collection-properties.html)。
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Config {
@XmlElement(name="BOXID")
private int boxId;
@XmlElement(name="LENGTH")
private int length;
@XmlElement(name="NEARBOXID")
@XmlList
private int[] nearBoxIds;
}
<强>配置强>
下面的对象将映射到XML文档的根目录。
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="CONFIGURATION")
@XmlAccessorType(XmlAccessType.FIELD)
public class Configuration {
@XmlElement(name="CONFIG")
private List<Config> configs;
}
<强>演示强>
下面是一些演示代码,以证明一切正常。
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Configuration.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum14305301/input.xml");
Configuration configuration = (Configuration) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(configuration, System.out);
}
}
<强> input.xml中/输出强>
以下是运行演示代码的输入和输出。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CONFIGURATION>
<CONFIG>
<BOXID>1</BOXID>
<LENGTH>100</LENGTH>
<NEARBOXID>2 3 4 5</NEARBOXID>
</CONFIG>
<CONFIG>
<BOXID>2</BOXID>
<LENGTH>200</LENGTH>
<NEARBOXID>1 8</NEARBOXID>
</CONFIG>
</CONFIGURATION>
答案 4 :(得分:0)
我认为这是一个选择问题。您可以这样使用它:
<NEARBOXID>2,3,4,5</NEARBOXID>
或者你这样使用它:
<NEARBOXID>2</NEARBOXID>
<NEARBOXID>3</NEARBOXID>
<NEARBOXID>4</NEARBOXID>
<NEARBOXID>5</NEARBOXID>
第二种方式要求你拥有与第一种不同的解析代码,但是你可以在拆分和处理字符串时保存一些代码。
答案 5 :(得分:0)
将数据提取为String并对其执行split()。
更好的方法是维护个人标签,如
<NEARBOXID>2</NEARBOXID>
<NEARBOXID>3</NEARBOXID>
<NEARBOXID>4</NEARBOXID>
<NEARBOXID>5</NEARBOXID>
对于解析xml查询,您可以根据需要使用XPath,XQuery或JAXB。