解析空标签
Parse empty tag
XmlPullParser 不解析自闭标记,直接跳过它,即使 "isEmptyElementTag" 也无济于事。如何解决这个问题呢?
我要解析自闭标签公司
XML结构
<phone>
<id>1</id>
<company/> // it should parse
<model>Galaxy</model>
<price>18000</price>
</phone>
代码:
try {
XmlPullParser xpp = prepareXpp();
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
switch (xpp.getEventType()) {
case XmlPullParser.START_TAG:
if (xpp.isEmptyElementTag()) {
tagName = "company"; }
break;
case XmlPullParser.TEXT:
if (tagName.equals("company")) {
Log.d(LOG_TAG, "Empty tag" );
}
break;
default:
break;
}
xpp.next();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
XmlPullParser prepareXpp () {
return getResources().getXml(R.xml.data);
如您在文档中所见:
Empty element (such as <tag/>) will be reported with two separate
events: START_TAG, END_TAG
所以它没有进入case XmlPullParser.TEXT:
标签。
如果您向 START_TAG
添加一些日志记录,您应该会在控制台中看到日志:
case XmlPullParser.START_TAG:
if (xpp.isEmptyElementTag()) {
Log.d(LOG_TAG, "Empty tag");
}
break;
编辑: 您可以尝试执行下一个解决方法将您的 xml 文件移动到原始文件夹并将下一个代码添加到:
XmlPullParser prepareXpp () {
InputStream istream = getResources().openRawResource(R.raw.data);
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(istream, "UTF-8");
return xpp;
}
我找到了解决这个问题的方法。
isWhitespace() 函数。
当我处理 TEXT 事件类型时,我会计算该函数。
Ang 将 null 分配给变量字符串值。
请注意,仅适用于某些事件类型。
对我来说很管用!
最好的问候
XmlPullParser 不解析自闭标记,直接跳过它,即使 "isEmptyElementTag" 也无济于事。如何解决这个问题呢? 我要解析自闭标签公司
XML结构
<phone>
<id>1</id>
<company/> // it should parse
<model>Galaxy</model>
<price>18000</price>
</phone>
代码:
try {
XmlPullParser xpp = prepareXpp();
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
switch (xpp.getEventType()) {
case XmlPullParser.START_TAG:
if (xpp.isEmptyElementTag()) {
tagName = "company"; }
break;
case XmlPullParser.TEXT:
if (tagName.equals("company")) {
Log.d(LOG_TAG, "Empty tag" );
}
break;
default:
break;
}
xpp.next();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
XmlPullParser prepareXpp () {
return getResources().getXml(R.xml.data);
如您在文档中所见:
Empty element (such as <tag/>) will be reported with two separate events: START_TAG, END_TAG
所以它没有进入case XmlPullParser.TEXT:
标签。
如果您向 START_TAG
添加一些日志记录,您应该会在控制台中看到日志:
case XmlPullParser.START_TAG:
if (xpp.isEmptyElementTag()) {
Log.d(LOG_TAG, "Empty tag");
}
break;
编辑: 您可以尝试执行下一个解决方法将您的 xml 文件移动到原始文件夹并将下一个代码添加到:
XmlPullParser prepareXpp () {
InputStream istream = getResources().openRawResource(R.raw.data);
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(istream, "UTF-8");
return xpp;
}
我找到了解决这个问题的方法。 isWhitespace() 函数。
当我处理 TEXT 事件类型时,我会计算该函数。
Ang 将 null 分配给变量字符串值。
请注意,仅适用于某些事件类型。
对我来说很管用! 最好的问候