【发布时间】:2015-05-05 05:34:42
【问题描述】:
我可以解析以下标签(<item>, <title>),但我无法解析带有命名空间(<yandex:full-text>)命名空间的标签,
xmlns:yandex="http://news.yandex.ru".
谁知道如何解决这个问题?
谢谢,
【问题讨论】:
-
我正在尝试使用命名空间解析 xml 标签,例如:example
我可以解析以下标签(<item>, <title>),但我无法解析带有命名空间(<yandex:full-text>)命名空间的标签,
xmlns:yandex="http://news.yandex.ru".
谁知道如何解决这个问题?
谢谢,
【问题讨论】:
检查这个。
示例 XML 数据
<current>
<city id="2643743" name="London">
<coord lon="-0.12574" lat="51.50853"/>
<country>GB</country>
<sun rise="2013-10-08T06:13:56" set="2013-10-08T17:21:45"/>
</city>
<temperature value="289.54" min="289.15" max="290.15" unit="kelvin"/>
<humidity value="77" unit="%"/>
<pressure value="1025" unit="hPa"/>
</country>
在这里,我假设您有 xml 数据的输入流。
InputStream stream = conn.getInputStream();
XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
XmlPullParser myparser = xmlFactoryObject.newPullParser();
myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES
, false);
myparser.setInput(stream, null);
parseXMLAndStoreIt(myparser);
stream.close();
以上代码将 XML 数据流设置为 PullParser 并发送到函数 parseXMLAndStoreIt()。
parseXMLAndStoreIt(XmlPullParser)
public void parseXMLAndStoreIt(XmlPullParser myParser) {
int event;
String text=null;
try {
event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = myParser.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("country")){
country = text;
}
else if(name.equals("humidity")){
humidity = myParser.getAttributeValue(null,"value");
}
else if(name.equals("pressure")){
pressure = myParser.getAttributeValue(null,"value");
}
else if(name.equals("temperature")){
temperature = myParser.getAttributeValue(null,"value");
}
else{
}
break;
}
event = myParser.next();
}
parsingComplete = false;
} catch (Exception e) {
e.printStackTrace();
}
}
【讨论】: