这个问题可能已经在Interwebs的一些黑暗的休息时间得到了回答,但我甚至无法弄清楚如何形成一个有意义的Google查询来搜索它。
所以:假设我有一个(简化的)XML文档,如下所示:
<root>
<tag1>Value</tag1>
<tag2>Word</tag2>
<tag3>
<something1>Foo</something1>
<something2>Bar</something2>
<something3>Baz</something3>
</tag3>
</root>
我知道如何使用JAXB在标准用例中将其解组为Java对象。
我不知道怎么做是将tag3
的内容解散为字符串。我的意思是:
<something1>Foo</something1>
<something2>Bar</something2>
<something3>Baz</something3>
作为字符串,标签和所有。
答案 0 :(得分:1)
使用注释@XmlAnyElement。 我一直在寻找相同的解决方案,我期望找到一些注释,以防止解析dom并按原样实现,但没有找到它。
详细信息: Using JAXB to extract inner text of XML element 和 http://blog.bdoughan.com/2011/04/xmlanyelement-and-non-dom-properties.html 我在方法getElement()中添加了一个cheking,否则我们可以得到IndexOutOfBoundsException
if (xml.indexOf(START_TAG) < 0) {
return "";
}
对我而言,这个解决方案的行为很奇怪。为xml的每个标记调用方法getElement()。第一个调用是“Value”,第二个调用是“ValueWord”等。它附加了前一个标记
<强>更新强> 我注意到这种方法仅适用于我们要解析为String的一个标记。无法正确解析followint示例:
<root>
<parent1>
<tag1>Value</tag1>
<tag2>Word</tag2>
<tag3>
<something1>Foo</something1>
<something2>Bar</something2>
<something3>Baz</something3>
</tag3>
</parent1>
<parent2>
<tag1>Value</tag1>
<tag2>Word</tag2>
<tag3>
<something1>TheSecondFoo</something1>
<something2>TheSecondBar</something2>
<something3>TheSecondBaz</something3>
</tag3>
</parent2>
带有父标记“parent2”的
“tag3”将包含来自第一个标记(Foo,Bar,Baz)的参数,而不是(TheSecondFoo,TheSecondBar,TheSecondBaz) 任何建议表示赞赏。 感谢。
答案 1 :(得分:-1)
我有一种实用方法,在这种情况下可能会派上用场。看看它是否有帮助。我用你的例子制作了一个示例代码:
public static void main(String[] args){
String text= "<root><tag1>Value</tag1><tag2>Word</tag2><tag3><something1>Foo</something1><something2>Bar</something2><something3>Baz</something3></tag3></root>";
System.out.println(extractTag(text, "<tag3>"));
}
public static String extractTag(String xml, String tag) {
String value = "";
String endTag = "</" + tag.substring(1);
Pattern p = Pattern.compile(tag + "(.*?)" + endTag);
Matcher m = p.matcher(xml);
if (m.find()) {
value = m.group(1);
}
return value;
}