- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的最后一个问题措辞很糟糕 - 我正在尝试解析以下 xml:
我在解析拥塞位置内的元素时遇到问题:
<tns:camera>
<tns:congestionLocations>
<tns:congestion>Free Flow</tns:congestion>
<tns:direction>Eastbound</tns:direction>
<tns:order>6</tns:order>
</tns:congestionLocations>
<tns:congestionLocations>
<tns:congestion>Free Flow</tns:congestion>
<tns:direction>Westbound</tns:direction>
<tns:order>2</tns:order>
</tns:congestionLocations>
<tns:id>130</tns:id>
<tns:offline>false</tns:offline>
<tns:underMaintenance>false</tns:underMaintenance>
</tns:camera>
使用 XMLPullParser,我可以读取 id、offline 等元素。这很好用。我已经编写了代码来解析下面的 XML:
// Get our factory and PullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// Open up InputStream and Reader of our file.
FileInputStream fis = ctx.openFileInput("CameraSites.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
// point the parser to our file.
xpp.setInput(reader);
// get initial eventType
int eventType = xpp.getEventType();
// Loop through pull events until we reach END_DOCUMENT
while (eventType != XmlPullParser.END_DOCUMENT) {
// Get the current tag
String tagname = xpp.getName();
// React to different event types appropriately
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase(KEY_SITE)) {
// If we are starting a new <site> block we need
//a new CameraClass object to represent it
curCameraClass = new CameraClass();
}
break;
case XmlPullParser.TEXT:
//grab the current text so we can use it in END_TAG event
curText = xpp.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(KEY_SITE)) {
// if </site> then we are done with current Site
// add it to the list.
CameraSites.add(curCameraClass);
} else if (tagname.equalsIgnoreCase(KEY_ID)) {
curCameraClass.setID(curText);
} else if (tagname.equalsIgnoreCase(KEY_MAIN)) {
curCameraClass.setMAIN(curText);
}
break;
default:
break;
}
//move on to next iteration
eventType = xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
// return the populated list.
return CameraSites;
}
我的问题是,如何解析在拥堵位置找到的拥堵和方向元素?我将它们解析为带有类(CameraClass)的 get/set 方法。
提前致谢!
最佳答案
这是您的 xml 代码..
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
public class FileActivity extends Activity {
// Progress dialog
ProgressDialog pDialog;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
String data = "<tns:camera>"
+" <tns:congestionLocations>"
+"<tns:congestion>Free Flow</tns:congestion>"
+"<tns:direction>Eastbound</tns:direction>"
+"</tns:congestionLocations>"
+"<tns:congestionLocations>"
+"<tns:congestion>Free Flow</tns:congestion>"
+"<tns:direction>Westbound</tns:direction>"
+"</tns:congestionLocations>"
+"<tns:description>Bond St looking east</tns:description>"
+"<tns:direction>Eastbound</tns:direction>"
+"<tns:group>SH16-North-Western</tns:group>"
+"<tns:lat>-36.869</tns:lat>"
+"<tns:lon>174.746</tns:lon>"
+"<tns:name>SH16 1 Bond St</tns:name>"
+"<tns:viewUrl>http://www.trafficnz.info/camera/view/130</tns:viewUrl>"
+" </tns:camera>";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new XmlParsing(data).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
else
new XmlParsing(data).execute(new String[]{null});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class XmlParsing extends AsyncTask<String, Void, String> {
// variables passed in:
String data;
// constructor
public XmlParsing(String data) {
this.data = data;
}
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(FileActivity.this, "Fetching Details..", "Please wait...", true);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder= dbFactory.newDocumentBuilder();
FileOutputStream out = openFileOutput("hello.txt",Context.MODE_PRIVATE);
out.write(data.getBytes());
out.close();
BufferedReader input = new BufferedReader(new InputStreamReader(openFileInput("hello.txt")));
StringBuffer inLine = new StringBuffer();
String text;
while ((text = input.readLine()) != null) {
inLine.append(text);
inLine.append("\n");
}
input.close();
String finalData =inLine.toString();
InputStream is = new ByteArrayInputStream(finalData.getBytes("UTF-8"));
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("tns:camera");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("tns:group");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
Log.v("tns:group : "+((Node) nameList.item(0)).getNodeValue());
Element fstElmnt1 = (Element) node;
NodeList nameList1 = fstElmnt1.getElementsByTagName("tns:viewUrl");
Element nameElement1 = (Element) nameList1.item(0);
nameList1 = nameElement1.getChildNodes();
Log.v("tns:viewUrl : "+ ((Node) nameList1.item(0)).getNodeValue());
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element e = (Element) node;
NodeList resultNodeList = e.getElementsByTagName("tns:congestionLocations");
int resultNodeListSize = resultNodeList.getLength();
for(int j = 0 ; j < resultNodeListSize ; j++ )
{
Node resultNode = resultNodeList.item(j);
if(resultNode.getNodeType() == Node.ELEMENT_NODE)
{
Element fstElmnt2 = (Element) resultNode;
NodeList nameList2 = fstElmnt2.getElementsByTagName("tns:congestion");
Element nameElement2 = (Element) nameList2.item(0);
nameList2 = nameElement2.getChildNodes();
Log.v("tns:congestion", ""+((Node) nameList2.item(0)).getNodeValue());
Element fstElmnt3 = (Element) resultNode;
NodeList nameList3 = fstElmnt3.getElementsByTagName("tns:direction");
Element nameElement3 = (Element) nameList3.item(0);
nameList3 = nameElement3.getChildNodes();
Log.v("tns:direction--", ""+((Node) nameList3.item(0)).getNodeValue());
}
}
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// Now we have your JSONObject, play around with it.
if (pDialog.isShowing())
pDialog.dismiss();
}
}
}
从日志中你可以看到结果...
关于java - 解析两个同名元素 - Pull Parser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670409/
我写了我遇到的问题,但现在我展示了所有代码xml文件 it can't contain other elements it can contain some other elements
我有两个 Controller using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using
我正在尝试保存几个同名的文件。我想做一些名字做这样的事情:file.extension file[1].extension file[2].extension 我试过这个 http://www.nas
我正在尝试创建一个脚本,该脚本将在多个页面上单击相同名称的按钮,但这些按钮具有不同的属性。有些有 id、一些名称、一些值和一些数据作为标识符。这个函数应该有一个属性列表,当我运行脚本时,它应该进入该列
从 Oracle 迁移我想重用一些定义,例如: ALTER TABLE CLIENTUSERS ADD CONSTRAINT UK_CLIENTUSERS_CLIENTUS UNIQUE (CLIEN
我有一个关于 unix 命令行的问题。我有很多这样的文件: /f/f1/file.txt /f/f2/file.txt /f/f3/file.txt and so on. 我想将所有 file.txt
我在表单“delsel2”中有几个复选框(全部具有相同的名称),如下所示: 我希望能够在选择其中任何一个时简单地发出警报,并显示一条消息指示是否选中其中任何一个。 我已经想出了这个,但它不起作用
假设您在子目录 project_1, ..., project_10 中有 10 个项目,它们都在父目录 projects 中。 所有项目都使用相同的库,在 project/project_n/lib
我有一个生成 iOS 框架的 Xcode 项目。我有两个版本的二进制文件要生成 - 一个供内部使用,没有许可要求,另一个供外部使用,但有许可要求。 我想我会为此制定两个目标,并使用不同的 swift
我已经读过有关 jQuery 验证的内容,但我仍然坚持在表单中需要控制数组。 我有这个代码: //already link the validation js script of course
我对这个领域很陌生。我正在尝试阅读一个示例程序。 第一个是team.c #include "support.h" struct team_t team = { "", /* first membe
我有一个包含一组复选框的 HTML 表单: Apple Banana Strawberry 当我单击一个按钮时,我希望将所有选中的同名复选框放在一个数组中。 因此,如果用户选择 Apple 和
我将第一个表存储在数据库中,如图所示,我必须对其应用查询以像第二个表一样显示它 最佳答案 这是使用条件聚合的一个选项: select subject, max(case when exa
对于我文件夹中的每个 mp3 文件,我都有一个同名的 jpg 文件,我试图用 cmd 实现的是将该名称变成一个没有文件扩展名的变量名 这是我只使用 mp3 名称的代码 for %%a in ("*.m
我有 2 个数据库....a 和 b 我在这两个数据库中都有表“t”。 现在我正在从数据库“b”中删除表 t。 我创建了一个 View “t”(请参阅 View 名称与已删除的表相同) 数据库“b
我正在创建一个有特定问题的 SCSS 网格 - 我想使用一个变量名,例如 $pad(用于填充值),但是 $pad变量在不同的媒体断点中需要不同。 首先通过动态创建断点并在其中设置 $pad 值的 mi
一些背景知识: 我正在尝试将我在 Solaris 上运行的一些 .ksh 文件移植到使用 Cygwin 的 Windows 上运行。在 Solaris 机器上运行的 ksh 实现与可在处理子 shel
当执行 tar 提取操作时,有时内容会直接提取到父文件夹,这很糟糕,因为它们变得杂乱无章。例如: tar -xzf foo1.tar.gz 摘录: ./file1 ./file2 ./file3 解决
我想做这样的事情: class X: @classmethod def id(cls): return cls.__name__ def id(self):
我正在看 John De Goes “FP to the Max”视频。在代码中,他做了这样的事情来获取隐式对象: object Program { def apply[F[_]](imp
我是一名优秀的程序员,十分优秀!