我需要以某种方式在特定节点中找到特定值,然后在文本视图中将其与属性值一起显示。 http://www.bsi.si/_data/tecajnice/dtecbs-l.xml这是我需要搜索的xml文件,它是多种货币的汇率列表。部分问题还在于具有相同名称的节点。
我已成功通过网络访问它。我只是找不到示例或教程如何找到特定的属性值,然后使用它来获取所需的文本。
我在Android Studio工作。冷杉用户将选择汇率日期,然后他选择他想要显示的所需货币,这样就会显示[所选货币] = [价值]
所以我认为,如果我至少可以将搜索范围缩小到具体日期,那将是一件事。
我之前使用Xpath成功完成了这个,但是这个文件太大了,所以我被迫使用SAX,但如果有的话,我会对其他例子开放。
我将此示例用作模板:http://www.pcsalt.com/android/xml-parsing-using-saxparser-android/ 我不知道我是否应该使用这种结构,但它是我认为与我的案例最相关的结构。
我对java有一些基本知识,但没有sax或任何其他解析器。
编辑:
我现在有工作代码,它返回所选日期的所有货币名称和汇率,在此示例中为2007-01-01。现在我想使用我在FirstPage活动中的日期选择器中的用户输入来查找所选日期的汇率和名称,但我无法让它工作。我不知道它是否与我从3个整数(日,月,年)中生成字符串值的方式有关,或者是将此字符串从FirstPage活动转换为此XMLHelepr类的内容。或者也许萨克斯不会采取这个变量。
public class XMLHelper extends DefaultHandler {
/**
* The URL to be parsed
*/
private String URL_MAIN = "http://www.bsi.si/_data/tecajnice/dtecbs-l.xml";
String TAG = "XMLHelper";
String datum ;
String oznaka;
Boolean currTag = false;
String currTagVal = "";
private PostValue post = null;
private ArrayList<PostValue> posts = new ArrayList<PostValue>();
public ArrayList<PostValue> getPostsList() {
return this.posts;
}
public FirstPage firstPage;
public void get() {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser mSaxParser = factory.newSAXParser();
XMLReader mXmlReader = mSaxParser.getXMLReader();
mXmlReader.setContentHandler(this);
InputStream mInputStream = new URL(URL_MAIN).openStream();
mXmlReader.parse(new InputSource(mInputStream));
} catch (Exception e) {
// Exceptions can be handled for different types
// But, this is about XML Parsing not about Exception Handling
Log.e(TAG, "Exception: " + e.getMessage());
}
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.i(TAG, "TAG: " + localName);
currTag = true;
currTagVal = "";
int len = attributes.getLength();
// Loop through all attributes and save them as needed
for(int i = 0; i < len; i++)
{
String sAttrName = attributes.getLocalName(i);
if(sAttrName.compareTo("datum") == 0)
{
datum = attributes.getValue(i);
Log.i(TAG, "Datum: " + datum);
}
}
int len2 = attributes.getLength();
// Loop through all attributes and save them as needed
for(int i = 0; i < len2; i++){
String sAttrName = attributes.getLocalName(i);
if(sAttrName.compareTo("oznaka") == 0)
{
oznaka = attributes.getValue(i);
Log.i(TAG, "Oznaka: " + oznaka);
}
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(datum.equals("2007-01-01")){
if(oznaka.equals(oznaka)) {
post = new PostValue();
if (currTag) {
currTagVal = currTagVal + new String(ch, start, length);
currTag = false;
post.setOznaka(oznaka);
post.setVrednost(currTagVal);
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currTag = false;
if(currTagVal!="")
posts.add(post);
}
}
我在FirstPage活动上使用日期选择器并将值设置为String以使用它来与属性&#34;数据&#34;来自XMLHelper.Im在此活动中使用geter-setter设置izbraniDatum值,并在第一个活动的textview中显示正确
dp1 = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
leto1= year;
mesec1= monthOfYear +1;
dan1 = dayOfMonth;
izbraniDatum= checkDigit(year)+"-"+checkDigit(monthOfYear + 1)+"-"+checkDigit(dayOfMonth);
setIzbraniDatum(izbraniDatum);
prikaz1.setText(getIzbraniDatum());
}
};
和XMLHelper中的比较行:
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(datum.equals(firstPage.getIzbraniDatum())){
有谁帮忙?
答案 0 :(得分:0)
我得到了它的工作。我需要做的就是创建一个字符串变量,它保存来自FirstPage的日期选择器静态的日期,所以它现在在活动开始时为十六进制的公共静态izDatum =“”;然后从datepicker获取字符串值,然后在编译它时简单地在XMLHelper类上调用if(date.equals(firstPage.izDatum)