解析XML字符串并构建字符串列表

时间:2016-05-09 06:30:30

标签: java xml jaxb

我有一个字符串,其内容是XML。我想分隔标签并将其变成Java中的字符串列表。以下是我正在尝试的内容:

string xml="<hello><hi a='a' b='b'/><hi a='b' b='a'/></hello>";

我想把它分成如下列表:

list[0]="<hi a='a' b='b'/>"
list[1]="<hi a='b' b='a'/>"

我尝试通过JAXB处理器执行此操作,但效果不佳。还尝试了一些使用拆分的愚蠢逻辑,但这也没有帮助。还有其他方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:1)

string xml="<hello><hi a='a' b='b'/><hi a='b' b='a'/></hello>";

//read XML from the given string
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
Document doc = builder.parse(is);

//this will return a list of xml tags whose name is `hi`
NodeList hiList = document.getElementsByTagName("hi");

//you can iterate over hiList and read/process them
for (int i = 0; i < hiList.getLength(); i++) {
    Node child = hiList.item(i);
    String name = child.getNodeName();
    String contents = child.getTextContent();
}

答案 1 :(得分:0)

虽然你想要实现的目标有点不清楚,但我不打算在你的情况下使用完整的XML解析器。使用标准DOMSAXStax解析器,您必须重新创建元素(尤其是属性)或使用Transformer

简单的regex似乎是最简单的解决方案:

String xml = "<hello><hi a='a' b='b'/><hi a='b' b='a'/></hello>";
String[] es = xml.split("(?=<)|(?<=>)");
List<String> result = new ArrayList<>(es.length);
for (int i = 0; i < es.length; i++) {
    // do not add first and last element ("hello" in your example)
    if (i > 0 && i < es.length - 1)
       result.add(es[i]);
}