我在Android上使用XmlPullParser但getText返回null.为什么会这样?
代码,注释行给出null
ArrayList<String> titleList = new ArrayList<String>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(this.getInputStream(), null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase(TITLE)) {
// MainActivity.itemsList.add(xpp.getText());
Log.d("XGamers", "a");
}
}``
eventType = xpp.next();
}
} catch (XmlPullParserException e) {
Log.e("XGamers", "XmlPullParserException in FeedParser");
} catch (IOException e) {
Log.e("XGamers", "IOException in FeedParser");
}
Run Code Online (Sandbox Code Playgroud) <doc>
<element>
text
<item>
text1
</item>
<item>
text2
</item>
text3
</element>
<element>
another text
</element>
...
</doc>
Run Code Online (Sandbox Code Playgroud)
我想将文本提取为如下字符串:
"text text1 text2 text3"
Run Code Online (Sandbox Code Playgroud)
"item"标签嵌套在"元素"中
我在Android中使用xmlpullparser,但如果它更容易,我可以使用任何其他解析器.TX.
我在Android 3.0+上没有错误,但只有在Android 2.2,2.3.3上,当我尝试通过解析一个小的XML文件时XmlPullParser,应用程序会出现错误:
org.xmlpull.v1.XmlPullParserException: PI must not start with xml
(position:unknown @1:5 in java.io.InputStreamReader@40568770)
Run Code Online (Sandbox Code Playgroud)
PI中提到的PI是什么?
我发现这可能会导致第一行XML文件(<?xml version="1.0" encoding="utf-8"?>),但我没有找到在较低的Android版本上发生这种情况的原因.
如果这是错误的原因(XML文件的第一行),我该如何解决这个问题?
我应该:
a)要求Web服务器的管理员更改XML?如果是的话,他应该在XML中改变什么?
b)子串InputStream使用BufferedReader?
不知何故,我认为第二种方法会导致弱Android手机的额外延迟.
编辑
我从调试器中提取XML内容并看到第一个结束时\r\n,然后下一个字符开始.这对你说什么吗?
这就是XML文件的样子.这是一个小的,并没有视觉原因为什么应用程序崩溃.
<?xml version="1.0" encoding="utf-8"?>
<song>
<artist>Pink Floyd</artist>
<title>Shine On You Crazy Diamond</title>
<picture>http://www.xxyz.com/images/image.jpg</picture>
<time>Fri, 23 Nov 2012 11:22:31 GMT</time>
</song>
Run Code Online (Sandbox Code Playgroud)
这就是从这个XML中取出的InputStream的样子(仅限起始字符).

请指教!!!
我正在开发一个应用程序,其中第一次我要解析来自远程服务器的xml文件中的数据.
但我无法选择哪种解析器有效或最适合解析.由于主要有三种类型的解析,我知道:
哪个是解析数据的最佳解析器?当我在Google上搜索并发现上述解析器的正反两面时.但我无法确定哪种效率最高.
XML具有大量标签的大量数据.
请指导我并建议我应该使用哪个解析器,因为我在我的应用程序中第一次使用解析.
我在我的Android应用程序数据库中收到此错误.
在SQLite数据库中,我assets借助此代码从文件夹中的脚本获取数据库查询.
manager = context.getResources().getAssets();
input = manager.open("createDb.xml");
xpp.setInput(input, null);
int type = xpp.getEventType();
while(type != XmlPullParser.END_DOCUMENT) {
if(type == XmlPullParser.START_DOCUMENT) {
Log.d(Tag, "In start document");
}
else if(type == XmlPullParser.START_TAG) {
Log.d(Tag, "In start tag = "+xpp.getName());
}
else if(type == XmlPullParser.END_TAG) {
Log.d(Tag, "In end tag = "+xpp.getName());
}
else if(type == XmlPullParser.TEXT) {
Log.d(Tag, "Have text = "+xpp.getText());
String strquery = xpp.getText();
db.execSQL(strquery);
}
type = xpp.next();
}
}
catch (XmlPullParserException e) { …Run Code Online (Sandbox Code Playgroud) 我在assets/xml文件夹中存储了以下XML结构:
<?xml version="1.0" encoding="utf-8"?>
<homescreen>
<homeitem name="Name1"
subtext="Description1"
icon="iconresource1" />
<homeitem name="Name2"
subtext="Description2"
icon="iconresource2" />
<homeitem name="Name3"
subtext="Description3"
icon="iconresource3" />
</homescreen>
Run Code Online (Sandbox Code Playgroud)
我正在homeitem使用XmlPullParser 阅读每个人:
int event;
String TAG_ITEM = "homeitem";
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG) {
String tag = parser.getName();
if (TAG_ITEM.equals(tag)) {
// Works - Logs "Name1"
Log.d(LOG_NAME, parser.getAttributeValue(0));
// Works - Logs "name"
Log.d(LOG_NAME, parser.getAttributeName(0));
// Works - Logs ""
Log.d(LOG_NAME, parser.getAttributeNamespace(0));
// Fails - Logs null
Log.d(LOG_NAME, parser.getAttributeValue(XmlPullParser.NO_NAMESPACE, …Run Code Online (Sandbox Code Playgroud) 我试图在Android中编写一些代码来设置AttributeSetfrom attrs.xml文件中的参数.但我收到"资源未找到"错误.
Java代码
MainActivity.java
package com.example.mycompoundbutton;
import org.xmlpull.v1.XmlPullParser;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Xml;
import android.app.Activity;
import android.content.res.Resources;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = this.getResources();
XmlPullParser parser = res.getXml(R.attr.xyz);
AttributeSet attrs = Xml.asAttributeSet(parser);
MyCompound my = new MyCompound(this,attrs);
my.MyTestFun(300,500);
}
}
Run Code Online (Sandbox Code Playgroud)
MyCompound.java
package com.example.mycompoundbutton;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.CompoundButton;
public class MyCompound extends CompoundButton
{
public MyCompound(Context context, AttributeSet attrs)
{
super(context, attrs);
TypedArray …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Retrofit库上传图像.这是我上传的方式:
请求代码:
@Multipart
@POST("/customerapp/{context}/{token}/passenger/passport/add/{passengerId}")
@Headers({
"Accept: application/xml",
"Accept-Encoding: gzip"
})
void UploadImage(
@Path("context") String context,
@Path("token") String token,
@Path("passengerId") String passengerId,
@Query("fileType") String fileType,
@Query("imageCategory") int imageCategory,
@Part("imageContent") TypedFile file,
Callback<VJSuccessResponse> callback
);
public static final String BASE_URL =
"http://webservicetest.abc.com/extranetServices/1.1";
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
Log.e("Retrofit Request Body", request.toString());
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BackendConstants.BASE_URL)
.setClient(new OkClient(new OkHttpClient()))
.setConverter(new SimpleXMLConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(requestInterceptor)
.build();
REST_CLIENT = restAdapter.create(BackendAPI.class);
REST_CLIENT.UploadImage(
BackendConstants.CONTEXT,
StateObject.sSPManager.getStoredPersonalDetails().getToken(),
passengerId,
new …Run Code Online (Sandbox Code Playgroud) 我的问题是我必须解析HTML数据
84 101 <br>some text<br><table border='1'>Here comes a table definition</table>
Run Code Online (Sandbox Code Playgroud)
并且XmlPullParserException抛出以下内容:
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
// do something
} else if (eventType == XmlPullParser.END_TAG) {
// do something else
}
eventType = xpp.next(); // the XmlPullParserException is thrown here, on method next()
}
Run Code Online (Sandbox Code Playgroud)
非常有趣和奇怪的部分是这样的:仅在Nexus S(OS版本4.0.4)上抛出异常,在具有较低OS版本的设备上,此方法运行良好.
错误消息如下:
org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT 84 101 @1:8 in java.io.StringReader@414e3248)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释我为什么只在ICS上发生这种情况?谢谢.
android xmlpullparser xml-parsing android-4.0-ice-cream-sandwich
gradle 文档不会花时间解释他们正在处理的实体。这就是为什么我想问这样一个基本问题。
我需要详细了解术语“组”、“模块”和“工件”对于更改此代码的真正含义:
compile('com.thoughtworks.xstream:xstream:1.4.7') {
exclude group: 'xmlpull', module: 'xmlpull'
}
Run Code Online (Sandbox Code Playgroud)
大约一年前,我使用从Android dalvik 转换中为 xmlpullparser获取的排除语句来修复多个 dex 文件故障。
但是升级到Android Studio 3.0后又出现这个错误!现在它说:Multiple dex files define Lorg/xmlpull/mxp1/MXParser有时...XmlPullParserException.java所以,我想了解我给出的参数exclude必须如何形成。
阅读文档,人们可能会认为组是包名称,而工件是类:
//excluding a particular transitive dependency:
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
Run Code Online (Sandbox Code Playgroud)
compile ( 'com.thoughtworks.xstream: xstream: 1.4.7' ) {
exclude group : …Run Code Online (Sandbox Code Playgroud) xmlpullparser ×10
android ×9
xml ×4
xml-parsing ×3
android-4.0-ice-cream-sandwich ×1
android-xml ×1
file ×1
file-upload ×1
gettext ×1
gradle ×1
multipart ×1
nested ×1
retrofit ×1
saxparser ×1
sqlcipher ×1
sqlite ×1
xstream ×1