Java 用Android搜索xml中的特定属性值和文本值
我需要以某种方式在特定节点中找到特定值,然后将其与属性值一起显示在文本视图中。 这是我需要搜索的xml文件,它列出了多种货币的汇率。问题的一部分还在于具有相同名称的节点 我正在成功地从web访问它。我只是找不到如何找到特定属性值并使用它来获得所需文本的示例或教程。 我在安卓工作室工作。第一个用户将选择汇率日期,然后选择想要显示的货币,因此它将显示[所选货币]=[值]Java 用Android搜索xml中的特定属性值和文本值,java,android,xml,attributes,sax,Java,Android,Xml,Attributes,Sax,我需要以某种方式在特定节点中找到特定值,然后将其与属性值一起显示在文本视图中。 这是我需要搜索的xml文件,它列出了多种货币的汇率。问题的一部分还在于具有相同名称的节点 我正在成功地从web访问它。我只是找不到如何找到特定属性值并使用它来获得所需文本的示例或教程。 我在安卓工作室工作。第一个用户将选择汇率日期,然后选择想要显示的货币,因此它将显示[所选货币]=[值] 所以我认为,如果我至少能将搜索范围缩小到特定的日期,那将是一件了不起的事情。 我以前用Xpath成功地做到了这一点,但是这个文件太
所以我认为,如果我至少能将搜索范围缩小到特定的日期,那将是一件了不起的事情。 我以前用Xpath成功地做到了这一点,但是这个文件太大了,所以我不得不使用SAX,但是如果有其他示例的话,我也愿意使用其他示例 我将此示例用作模板: 我不知道我是否应该使用这个结构,但我发现它与我的案例最相关 我对java有一些基础知识,但对sax或任何其他解析器都没有 编辑: 我现在有了一个工作代码,可以返回所选日期的所有货币名称和汇率,在下面的2007-01-01示例中。现在我想使用日期选择器中的用户输入,我在第一页活动中找到了该日期的汇率和名称,但我就是无法让它工作。我不知道这是因为我用3个整数(天、月、年)生成字符串值的方式,还是因为这个字符串从第一页活动转换到这个XMLHelepr类。或者sax不会接受这个变量
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);
}
以及XMLHelper中的比较行:
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(datum.equals(firstPage.getIzbraniDatum())){
有人帮忙吗?我让它工作了。我所需要做的就是使字符串变量保持FirstPage的日期选择器中的日期为静态,所以它现在在活动开始时被声明为public static izDatum=“”;然后从datepicker获取字符串值,然后在比较它时,在XMLHelper类上对其进行简单的调整,如果(date.equals(firstPage.izDatum)SAX是一项要求,还是您的应用程序在某种程度上受到内存、CPU或文件大小的限制?是的,它是一个很大的xml文件,我想使用Xpath,但它不起作用。只是为了更新,我有点需要搜索正确的属性,现在我的问题是从日期选择器设置bi user获取年、月、日的整数,以转换为字符串并使用当与属性进行比较时,将d作为值。如果我没有得到完整的解决方案,我将很快发布更新。
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(datum.equals(firstPage.getIzbraniDatum())){