使用Android

时间:2016-02-24 22:47:54

标签: java android xml attributes sax

我需要以某种方式在特定节点中找到特定值,然后在文本视图中将其与属性值一起显示。 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())){
有谁帮忙?

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。我需要做的就是创建一个字符串变量,它保存来自FirstPage的日期选择器静态的日期,所以它现在在活动开始时为十六进制的公共静态izDatum =“”;然后从datepicker获取字符串值,然后在编译它时简单地在XMLHelper类上调用if(date.equals(firstPage.izDatum)