首页 > 解决方案 > 如何将String格式的xml解析为数组?

问题描述

有这样的字符串格式的xml:

<Users>
  <User> 
      <name>Alex</name>  
      ...other info
  </User>
  <User>
      <name>Natasha</name>
      ...other info
  </User>
</Users>

如何将这样的字符串拆分为字符串数组?

我的常见任务是,获取输入 xml,在元素上拆分,每个元素序列化并分别保存在数据库中。所以,对于我的任务 SAX,可能只有 Pattern 和 Matcher。

标签: javastring

解决方案


假设你想要一个像

names[] = {"Alex", "Natasha"};

从 XML 文件:

<Users>
  <User> 
      <name>Alex</name>  
      <city>New York</city> 
  </User>
  <User>
      <name>Natasha</name>
      <city>New Jersey</city> 
  </User>
</Users>

您可以使用 JacksonXML 解析器来获取所有用户的名称。我已经为 RootElement 使用了用户类

@JacksonXmlRootElement(localName = "Users")
public class Users {    
    @JacksonXmlProperty(isAttribute=false, localName="User")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<User> user;
    public List<User> getUsers() {
        return user;
    }
    public void setUsers(List<User> users) {
        this.user = users;
    }   
}

和内部用户块的用户类

public class User {
    @JacksonXmlProperty(isAttribute=false, localName="name")
    private String name;
    @JacksonXmlProperty(isAttribute=false, localName="city")
    private String city;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
}

然后将 XML 文件读取为:

public static void main(String[] args) throws XMLStreamException, IOException {
        XmlMapper xmlMapper = new XmlMapper();
        Users users = xmlMapper.readValue(new File("yourFileName"), Users.class);
        Object[] names = users.getUsers()
                            .stream()
                            .map(u -> u.getName())
                            .collect(Collectors.toList())
                            .toArray();
        //You may have to cast the names to String
    }

推荐阅读