gpt4 book ai didi

java - 在 Java 中从 XML 获取属性值

转载 作者:行者123 更新时间:2023-12-01 14:52:49 24 4
gpt4 key购买 nike

我正在尝试将以下站点的一些数据解析到我正在创建的 Android 应用程序

TFL Tube Data

此 Feed 中的数据会不断更新,可以容纳从无到 15/16 项的任何数据。每一项的基本格式如下:

<ArrayOfLineStatus> - BEGINNING OF XML DOCUMENT    
<LineStatus ID="10" StatusDetails="No service this weekend due to planned engineering work.">
<BranchDisruptions/>
<Line ID="7" Name="Circle"/>
<Status ID="CS" CssClass="DisruptedService" Description="Planned Closure" IsActive="true">
<StatusType ID="1" Description="Line"/>
</Status>
</LineStatus>
<ArrayOfLineStatus> - END OF XML DOCUMENT

我需要遍历整个并提取“行”中“名称”和“状态”中“描述”的属性值。所以在上面我会拉“圆圈”和“计划关闭”。到目前为止我做过的类(class)如下:

主类

    public class TubeStatusXMLParsing  extends Activity {

static final String baseURL = "http://cloud.tfl.gov.uk/TrackerNet
/LineStatus/IncidentsOnly";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build();
StrictMode.setThreadPolicy(policy);
super.onCreate(icicle);
setContentView(R.layout.tube_status);
getStatus();
}

public void getStatus() {
// TODO Auto-generated method stub
try{
URL website = new URL(baseURL);
//getting xmlreader to parse data
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
HandlingXMLStuff doingWork = new HandlingXMLStuff();
xr.setContentHandler(doingWork);
xr.parse(new InputSource(website.openStream()));
String listofStatuses = doingWork.getInformation();
circleStatus.setText(listofStatuses);
}catch (Exception e){
circleStatus.setText("error");
}
}
}

处理 XML

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.sax.Element;
import android.sax.RootElement;

public class HandlingXMLStuff extends DefaultHandler {

private ArrayList<String>statuses = null;
String status;
String lineName;

public String getInformation(){
return statuses.get(0);
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equalsIgnoreCase("ArrayOfLineStatus")){
statuses = new ArrayList<String>();
}else if(qName.equalsIgnoreCase("Status")){
status = attributes.getValue("Status");
statuses.add(status);
}

}

对此的任何帮助将不胜感激

谢谢

最佳答案

使用 Attributes 对象的方法是正确的,但必须使用元素内属性的索引位置。

因此,您需要在attributes.getName() 方法上使用for 循环来迭代元素的属性,直到attributes.getName(i).equals("Name")。一旦确定了索引,只需使用属性attributes.getValue(i)即可。

关于java - 在 Java 中从 XML 获取属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com