我想获得使用XmlResourceParser解析自定义Android标记的正确方法.我使用Eclipse 3.6与android插件,我想要一些属性,如name使用完整的字符串扩展strings.xml.
这是index.xml在res/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包含null但shortName包含"o_2sq".我也试过以下没有成功:
String name = xpp.getAttributeValue("android", "name");
Run Code Online (Sandbox Code Playgroud)
编写句子的正确方法是什么,以便变量名称包含"Organize two squares"?
我在我的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) 我用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)
请注意,调用此方法不需要任何参数.请帮忙.:(
我正在使用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) 我正在增强一个客户,这是一个更大的项目的一部分.由于速度不足,我被迫切换到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目录链接到该函数可以找到并访问它的可执行文件的方法,就应该解决问题.你们中的任何人都知道这样做的方法吗?
我正在开发一个应用程序,它将从我在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时遇到了麻烦,我尝试了很多东西.
我有像这样的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文件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)
有没有解决的办法?
我试图从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"(上面的值)?
谢谢!
我正在尝试解析我在资源文件夹中的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)
这是我得到的例外: …
xmlpullparser ×10
android ×9
xml ×3
java ×2
xml-parsing ×2
compiled ×1
exception ×1
gcj ×1
jvm ×1
ksoap2 ×1
string ×1
unit-testing ×1
xpath ×1
xstream ×1