从XML文件中拆分String

时间:2013-01-13 16:11:19

标签: java xml

我正在读取一个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>

6 个答案:

答案 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。