使用 XMLPullParser 解析所有 XML 文本
Parse all XML text using XMLPullParser
我有一个类似于 [this one here][1]
的问题
我已经阅读了有关 XMLPullParser 的教程,但似乎没有得到这个。
我有一个 XML 标签,我想使用 XMLPullParser
解析
<dt>
: <sx>outcome</sx>
<sx>result</sx>
</dt>
我想得到结果“:outcome result。”
因为我正在从在线基地阅读此 XML。它可能会改变。例如:
<dt>
:degree or measure of
<d_link>succeeding</d_link>
</dt>
问题是如何解析和获取标签 "dt" 中的所有文本,而不考虑其中标签的名称?
这是我尝试过的方法,但没有用。
while (parser.next() != END_TAG){
if (parser.getEventType() != TEXT)
{
continue;
}
else if (parser.getEventType() == TEXT)
{
Log.d("Text", parser.getText()+" in the likelihood");
stringBuilder.append(parser.getText());
parser.next();
}
}
你应该做类似的事情:
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("dt"))
{
// create a new instance of DTClass
dt= new DTClass();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("dt")) {
// add DTClass object to list
dts.add(dt);
}
else if (tagname.equalsIgnoreCase("sx"))
{
dt.setSX(text);
}
break;
default:
break;
}
eventType = parser.next();
}
如果我们假设 xml 的格式正确,您可以更改代码以记住打开的标签、值以及标签结束时向 dictionary/list 添加一个值,如下所示:
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
String detectedTag = "" ;
String valueTag = "" ;
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("dt"))
{
// create a new instance of DTClass
// move this line to the end tag
//dt= new DTClass();
}
detectedTag = tagname ;
break;
case XmlPullParser.TEXT:
valueTag = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(detectedTag)) {
// create a new instance of DTClass
dt= new DTClass();
// set value
dt.setValue(valueTag);
// add DTClass object to list od dictionary
dts.add(dt);
}
else
{
// clear tag and value tag
detectedTag = "" ;
valueTag = "";
}
break;
default:
break;
}
eventType = parser.next();
}
我有一个类似于 [this one here][1]
的问题
我已经阅读了有关 XMLPullParser 的教程,但似乎没有得到这个。
我有一个 XML 标签,我想使用 XMLPullParser
解析<dt>
: <sx>outcome</sx>
<sx>result</sx>
</dt>
我想得到结果“:outcome result。” 因为我正在从在线基地阅读此 XML。它可能会改变。例如:
<dt>
:degree or measure of
<d_link>succeeding</d_link>
</dt>
问题是如何解析和获取标签 "dt" 中的所有文本,而不考虑其中标签的名称?
这是我尝试过的方法,但没有用。
while (parser.next() != END_TAG){
if (parser.getEventType() != TEXT)
{
continue;
}
else if (parser.getEventType() == TEXT)
{
Log.d("Text", parser.getText()+" in the likelihood");
stringBuilder.append(parser.getText());
parser.next();
}
}
你应该做类似的事情:
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("dt"))
{
// create a new instance of DTClass
dt= new DTClass();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("dt")) {
// add DTClass object to list
dts.add(dt);
}
else if (tagname.equalsIgnoreCase("sx"))
{
dt.setSX(text);
}
break;
default:
break;
}
eventType = parser.next();
}
如果我们假设 xml 的格式正确,您可以更改代码以记住打开的标签、值以及标签结束时向 dictionary/list 添加一个值,如下所示:
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
String detectedTag = "" ;
String valueTag = "" ;
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("dt"))
{
// create a new instance of DTClass
// move this line to the end tag
//dt= new DTClass();
}
detectedTag = tagname ;
break;
case XmlPullParser.TEXT:
valueTag = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(detectedTag)) {
// create a new instance of DTClass
dt= new DTClass();
// set value
dt.setValue(valueTag);
// add DTClass object to list od dictionary
dts.add(dt);
}
else
{
// clear tag and value tag
detectedTag = "" ;
valueTag = "";
}
break;
default:
break;
}
eventType = parser.next();
}