我有一个字符串,其内容是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处理器执行此操作,但效果不佳。还尝试了一些使用拆分的愚蠢逻辑,但这也没有帮助。还有其他方法可以达到这个目的吗?
答案 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解析器。使用标准DOM
,SAX
或Stax
解析器,您必须重新创建元素(尤其是属性)或使用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]);
}