我被绑定使用XmlPullParser(因为我们使用Smack XMPP库)。 但是用它解析XML并将读取值放入bean中是非常不方便的(至少如果给出了XSD)。相比之下,JAXB将更容易使用。
同样对于序列化来说,手动连接字符串是一种“老式且容易出错的方法”。 (参见http://babbler-xmpp.blogspot.co.at/2014_01_01_archive.html的动机,其中也总结了缺点)。
但是要使用JAXB进行反序列化,我必须得到原始的XML-String。
当然,一种方法是使用XmlPullParser的解析方法(如getName()
,getText()
,getAttributes()
,...)重建整个XML-String。但我想避免这种情况。
那么是否可以获取特定标记的整个原始XML-String(例如XmlPullParser当前指向的位置)?或者有没有人知道一些重构XmlPullParser实例的XML的实用程序?
答案 0 :(得分:0)
由于似乎没有其他方法可以获取原始XML字符串,因此我决定使用XmlPullParser的解析方法重构它(如上面的问题所述)。
万一有人需要它:在初稿中,代码看起来像这样
int eventType = parser.getEventType();
String extensionElementName = parser.getName();
StringBuilder extensionBuilder = new StringBuilder();
String element = "";
while(!(eventType == XmlPullParser.END_TAG && parser.getName().equalsIgnoreCase(extensionElementName))) {
if(eventType == XmlPullParser.END_TAG && parser.getText().equalsIgnoreCase(element)) {
// this is for elements which are closed immediately like the following example: <sample />
// otherwise, this line would be added twice
} else {
extensionBuilder.append(parser.getText());
}
element = parser.getText();
eventType = parser.next();
}
// append closing element
if(!parser.getText().equalsIgnoreCase(element))
extensionBuilder.append(parser.getText());