标签: xmlpullparser

Android自定义XML解析器无法解析android命名空间

我想获得使用XmlResourceParser解析自定义Android标记的正确方法.我使用Eclipse 3.6与android插件,我想要一些属性,如name使用完整的字符串扩展strings.xml.

这是index.xmlres/xml/文件夹中解析的.

<?xml version="1.0" encoding="utf-8"?>
<Index xmlns:android="http://schemas.android.com/apk/res/android">
<Sheet
    shortName="o_2sq"
    android:name="@string/o_2sq"
    instructions=""
/>
</Index>
Run Code Online (Sandbox Code Playgroud)

这是文件夹strings.xml中的res/values/文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="o_2sq">Organize two squares</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

以及index.xml使用XmlResourceParser 解析第一个的代码片段:

String name = xpp.getAttributeValue(null, "android:name");
String shortName = xpp.getAttributeValue(null, "shortName");
Run Code Online (Sandbox Code Playgroud)

变量name包含nullshortName包含"o_2sq".我也试过以下没有成功:

String name = xpp.getAttributeValue("android", "name");
Run Code Online (Sandbox Code Playgroud)

编写句子的正确方法是什么,以便变量名称包含"Organize two squares"

string android xml-namespaces xmlpullparser

5
推荐指数
1
解决办法
3816
查看次数

XmlPullParser不能与InputStream一起使用

我在我的Android应用程序中使用XmlPullParser进行xml解析但是当我将输入设置为InputStream时它不起作用而我将输入设置为Reader它开始工作

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(obj,null);//obj is the object of InputStream
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
                 logger.println("eventType.."+eventType);
              if(eventType == XmlPullParser.START_DOCUMENT) {

                     // control goes here only

              } else if(eventType == XmlPullParser.START_TAG) {
                  //This block never executed
                  }

              } else if(eventType == XmlPullParser.END_TAG) {
                 //This block never executed
              } else if(eventType == XmlPullParser.TEXT) {

              }
              eventType = xpp.next();
             }
Run Code Online (Sandbox Code Playgroud)

即使我将InputStream对象中的数据存储在一个字符串中并将该String设置为输入,这个代码也可以正常工作.

xpp.setInput(new StringReader(str));//str contains the data from InputStream
Run Code Online (Sandbox Code Playgroud)

android xmlpullparser xml-parsing

5
推荐指数
1
解决办法
5376
查看次数

android ksoap调用xmlpullparser异常

我用ksoap2来调用我的SOAP服务.它在android2.2中工作正常,但是当相同的代码在android2.3.3之后运行时,它会在以下行中引发异常.

http_transport_se.call(SOAP_ACTION, envelope);
Run Code Online (Sandbox Code Playgroud)

抛出异常,如下所示.

org.xmlpull.v1.XmlPullParserException: unexpected type (position:TEXT ?????????????[?G...@1:255 in java.io.InputStreamReader@4057acc8) 
Run Code Online (Sandbox Code Playgroud)

请注意,调用此方法不需要任何参数.请帮忙.:(

android exception ksoap2 xmlpullparser

5
推荐指数
1
解决办法
1208
查看次数

xpath中的未知错误(使用xmlpullparser)

我正在使用XmlPullParser打开文件并XPath获取根目录.(稍后我将修改我的代码以获取idx节点)

但是,我收到以下错误:

javax.xml.transform.TransformerException: Unknown error in XPath.
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索过但没找到任何可以解决这个问题的东西.

try{
    XmlPullParser xpp = getResources().getXml(R.xml.x1);
    XPath xpath = XPathFactory.newInstance().newXPath();
    String askFor2 = "/root";
    NodeList creaturesNodes = (NodeList) xpath.evaluate(askFor2, xpp, XPathConstants.NODESET);
    Log.d("", "");
} catch (Exception ex) {
    String err = (ex.getMessage()==null)?"run thread failed":ex.getMessage();
    Log.e("bm run catch", err);
}
Run Code Online (Sandbox Code Playgroud)

我的XML文件是

<?xml version="1.0"?>
<root>
    <child index="1">
        <idx index="1" />
        <idx index="2" />
        <idx index="3" />
        <idx index="4" />
        <idx index="5" />
        <idx index="6" />
        <idx index="7" />
    </child> …
Run Code Online (Sandbox Code Playgroud)

xml xpath android xmlpullparser

5
推荐指数
1
解决办法
997
查看次数

用gcj编译java和XStream.(例外:无法创建XmlPullParser)

我正在增强一个客户,这是一个更大的项目的一部分.由于速度不足,我被迫切换到CNI,因此我必须使用GNU-gcj编译器生成本机代码(gnu 4.6.3).

编译和链接工作正常(感谢-findirect-dispatch标志),我没有任何问题执行输出.但是当涉及到客户端和服务器之间的通信时,客户端会立即断开连接.原因:

[XStreamClient Reader] WARN - 客户端断开连接(例外:com.thoughtworks.xstream.io.StreamException:无法创建XmlPullParser)

(此Exeption仅出现在客户端的gcj编译版本中.当我使用java解释器运行代码时 - 事情运行良好(但速度太慢^^)) - >具有挑战性的部分是我无法检索源代码发生此异常的代码,因为它位于客户端使用的预编译(Java类文件)库中.(我无法联系该图书馆的作者)

我想这个库会调用XppReader然后尝试创建一个XmlPullParser类并失败.

我通过解压缩它们并编译创建的*.class文件然后链接目标文件来绑定XStream(vers.1.4.3)库(以及其他所需的*.jars).这似乎也适用于所有其他图书馆.(我的操作系统= Ubuntu)

我已经做了什么来克服这个问题:我搜索了XStream/XmlPullParser和gcj,并用不同的版本替换了"xmlpull" - 和"kxml2"文件.但没有任何效果.你们中的任何人都知道可能是什么解决方案吗?

编辑:

我发现XmlPullParser创建失败的原因是XmlPullParserFactory.newInstance函数无法找到带有/services/org.xmlpull.v1.XmlPullParserFactory文件的META-INF目录.这是因为我只编译并链接了*.jar的*.class文件.因此,只要我找到了将META-INF目录链接到该函数可以找到并访问它的可执行文件的方法,就应该解决问题.你们中的任何人都知道这样做的方法吗?

java compiled gcj xstream xmlpullparser

5
推荐指数
1
解决办法
5496
查看次数

XmlPullParser - 意外令牌(android)

我正在开发一个应用程序,它将从我在res/xml/experiment.xml中存储的xml中读取,但是当我尝试解析它时,它给了我一个xmlPullParserException.

这是我非常简单的xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <message>Hello</message>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    public static void parse(Context ctx) throws XmlPullParserException, IOException {
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xpp = factory.newPullParser();

    InputStream in = ctx.getResources().openRawResource(R.xml.experiment);

    xpp.setInput(in, "UTF_8");

    int eventType = xpp.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        String tagName = xpp.getName();

        switch (eventType) {
        case XmlPullParser.START_TAG:
            Log.d("debug", "Entering tag: " + tagName);

            break;
        case XmlPullParser.TEXT:
            Log.d("debug", "Text inside: " + xpp.getText());

            break;
        case XmlPullParser.END_TAG:
            Log.d("debug", "Ending tag: " + tagName);

            break;

        }

        eventType = xpp.next();
    }

}
Run Code Online (Sandbox Code Playgroud)

以下是它抛出的异常: …

xml android xmlpullparser

5
推荐指数
2
解决办法
1万
查看次数

我该如何解析XML android?

我在解析XML时遇到了麻烦,我尝试了很多东西.

我有像这样的xml.

<question id="1" text="Zodiac Sign" >
  <option id="1" >Aries</option>
  <option id="2" >Taurus</option>
  <option id="3" >Gemini</option>
  <option id="4" >Cancer</option>
  <option id="5" >Leo</option>
  <option id="6" >Virgo</option>
  <option id="7" >Libra</option>
  <option id="8" >Scarpio</option>
  <option id="9" >Sagitarius</option>
  <option id="10" >Capricorn</option>
  <option id="11" >Acqauarius</option>
</question><question id="2" text="Home Town" >
</question><question id="3" text="Current Locaion" >
</question><question id="4" text="Nationality" ></question>
<question id="5" text="Height" ></question>
<question id="6" text="Build(optional)" >
  <option id="13" >Slim</option>
  <option id="14" >Athletic</option>
  <option id="15" >Few Pounds Extra</option>
  <option id="16" >Obese</option>
</question><question id="7" text="Hair Color" …
Run Code Online (Sandbox Code Playgroud)

xml android xmlpullparser xml-parsing android-xmlpullparser

5
推荐指数
1
解决办法
207
查看次数

在JVM上使用Android XmlPullParser进行单元测试

我正在尝试为我的应用程序设置单元测试用例.

应用程序的一个关键部分解析XML文件org.xmlpull.v1.XmlPullParser.由于这部分是低级的,独立的,独立于活动,上下文,视图等,我真的想让它在JVM上本地运行,以避免必须一直插入或模拟设备.

但是在JVM上运行这样的东西时:

XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, null);
...
Run Code Online (Sandbox Code Playgroud)

我得到了名人:

Exception in thread "main" java.lang.RuntimeException: Stub!
    at android.util.Xml.newPullParser(Xml.java:15)
    ...
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?

java android unit-testing jvm xmlpullparser

5
推荐指数
1
解决办法
1043
查看次数

如何使用XmlPullParser获取节点值

我试图从XmlPullParser获取XML的值,但无法达到我想要的值.XML结构类似于Android Strings.xml:

<string name="value"> 1 </string>
Run Code Online (Sandbox Code Playgroud)

我可以从XML获得"string","name"和"value"但无法达到实际值"1".似乎XmlPullParser仅适用于这样的结构:

<value> 1 </value>
Run Code Online (Sandbox Code Playgroud)

我是否需要使用其他解析器,或者是否有办法以某种方式达到"1"(上面的值)?

谢谢!

android xmlpullparser

4
推荐指数
2
解决办法
7125
查看次数

解析Android中的资源文件时出现XmlPullParserException

我正在尝试解析我在资源文件夹中的XML文件.这就是我要做的 -

public void loadXMLtoDB() {

    Resources resource = mContext.getResources();
    dbInstance = new DBProvider();
    dbInstance.onCreate();
    try{
        XmlResourceParser parser = resource.getXml(R.xml.default_apps); 

        parser.nextTag();
        readApps(parser);

    } catch (Exception e) {
        e.printStackTrace();
    }
}....

private void readApps(XmlResourceParser parser) throws XmlPullParserException, IOException {

    parser.require(XmlPullParser.START_TAG, null, "appsList");

    while(parser.next() != XmlPullParser.END_TAG){
        if(parser.getEventType() != XmlPullParser.START_TAG)
            continue;

        String name = parser.getName();

        if(name.equals("appIcon")){
            readAppIcon(parser);
        }
        else 
            skip(parser);
    }
} .....
Run Code Online (Sandbox Code Playgroud)

这是我的XML文件 -

<appsList xmlns:launcher="http://schemas.android.com/apk/res/com.example.kids" >
    <appIcon>
        <className>com.sec.android.app.camera.Camera</className>
        <iconPosition>0</iconPosition>
        <packageName>com.sec.android.app.camera</packageName>
        <screen>0</screen>
    </appIcon>
    <appIcon>
        <className>com.sec.android.gallery3d.app.Gallery</className>
        <iconPosition>1</iconPosition>
        <packageName>com.sec.android.gallery3d</packageName>
        <screen>0</screen>
    </appIcon>
</appsList>
Run Code Online (Sandbox Code Playgroud)

这是我得到的例外: …

android xmlpullparser

4
推荐指数
1
解决办法
3932
查看次数