草庐IT

java - SAX 解析器从端元素中获取属性

coder 2023-12-16 原文

我使用 SAX XML 解析器,当我使用时:

public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException

我可以获得属性。 但我需要从 public void endElement

获取属性

解析类似的东西:

<item name="test" value="somedata" />

代码:

公共(public)类 SAXXMLHandler 扩展了 DefaultHandler {

private ArrayList<itemsList> items;
private String tempVal;
private itemsList tempEmp;

private PackageManager manager;
private String packName;

public SAXXMLHandler(PackageManager manager, String packName) {
    items = new ArrayList<itemsList>();

    this.manager = manager;
    this.packName = packName;

}

public void characters(char[] ch, int start, int length)
        throws SAXException {
    tempVal = new String(ch, start, length);
}

// Event Handlers
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
    Log.d("INFO", "startElement " + localName + ", " + qName + ", " + attributes);
    // reset
    tempVal = "";
    if (qName.equalsIgnoreCase("item")) {
        // create a new instance of employee
        tempEmp = new itemsList();
        tempEmp.setName(attributes.getValue("name"));
    }
}

public void endElement(String uri, String localName, String qName)
        throws SAXException {
    Log.d("INFO", "endElement " + localName + ", " + qName);

}

并且不要从 startElement 登录

更新

我在 fragment 中使用:

SAXXMLHandler handler = new SAXXMLHandler();
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse(asset, handler);
            items = SAXXMLHandler.icons;

            Util.l(String.valueOf(SAXXMLHandler.icons.size())); //log
            for(itemList item:SAXXMLHandler.icons)
            {
                Util.l(item.getComponent()+"\t\t"+item.getComponent()); //log
            }

SAXMLHandler 外观:

public class SAXXMLHandler extends DefaultHandler {

    public static ArrayList<itemsList> items;
    private itemsList item;

    public SAXXMLHandler() {
        items = new ArrayList<itemsList>();
    }

    public void characters(char[] ch, int start, int length)
            throws SAXException {

    }

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        item = new itemsList();
        Log.d("INFO", "startElement " + localName + ", " + qName);
        if (qName.equalsIgnoreCase("item")) {
            item.setComponent(attributes.getValue("component"));
            items.add(item);
        }
    }

    public void endElement(String uri, String localName, String qName)
            throws SAXException {

    }
}

还是什么都没有:/

我解析的其他应用程序中的 XML 文件 http://pastebin.com/5GEthfmU

最佳答案

在给定的 XML 行中..

<item name="test" value="somedata" />

namevalue 是只能在 startElement() 方法中检索的属性。因为,Attributes attributes 参数仅传递给 startElement(String uri, String localName, String qName, Attributes attributes) 方法。如果您查看 endElement(String uri, String localName, String qName) 方法,您会发现没有 Attributes 属性。这就是为什么您无法从 endElement() 方法中检索任何属性的原因。因此,如果您想从 XML 中检索任何 attributes,那么您必须在 startElement(String uri, String localName, String qName, Attributes attributes) 中检索它们 方法。

关于java - SAX 解析器从端元素中获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21822401/

有关java - SAX 解析器从端元素中获取属性的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  6. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  7. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  8. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  9. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  10. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

随机推荐