【问题标题】:how to store an xml tag as an array in java如何在java中将xml标签存储为数组
【发布时间】:2011-03-30 15:08:05
【问题描述】:

在我的应用程序中,我正在解析一个 xml 文件。在 xml 文件中,我有 50 个同名标签 question,现在我想将所有名为 question 的标签存储为一个数组....

在保存的这些标签中,我只想将一个问题标签放置在文本视图中......

如何执行此操作....请帮助我.....

【问题讨论】:

  • 请问如何解析xml?
  • 不...我想将解析后的标签存储在一个数组中...
  • 例如,如果您使用 SAX,您可以在每次读取对象字符串时将问题添加到数组中(在从 DefaultHandler 扩展的类中)。比您为该数组编写访问器。
  • 我正在使用 SAX 解析器,你能给我一个例子,以便我能够理解.....
  • 我已将其放入新答案中。它超过了评论长度限制。它是自定义处理程序类。我编码你将使用 SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); CustomHandler myExampleHandler = new CustomHandler(); xr.setContentHandler(myExampleHandler); xr.parse(new InputSource(byteStream)); ArrayList 数组 = myExampleHandler.getResult();

标签: java arrays xml-parsing


【解决方案1】:
public class CustomHandler extends DefaultHandler {

    private ArrayList<String> questionList;
    private boolean questionBuffering;
    private StringBuilder sb;



    @Override
    public void startDocument() throws SAXException {
    questionList = new ArrayList<String>();
    } 

    @Override
    public void endDocument() throws SAXException {
    } 

    @Override
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
        if (localName.equals("question")) {
            questionBuffering = true;
        }

    }


    @Override
    public void characters(char ch[], int start, int length) {
        if(questionBuffering) {
            sb.append(ch, start, length);
        }

    } 

    @Override
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        if (localName.equals("question")) {
            questionBuffering = false;
        questionList.add(sb.toString());
        }
    }

    public ArrayList<String> getResult() {
        return questionList;
        };
    }
}

【讨论】:

    【解决方案2】:

    This answer 似乎很容易适应您的需求。在示例中,问题存储在地图中,但很容易将其更改为 ArrayList 或数组。

    【讨论】:

      【解决方案3】:

      您可以使用 DOM 解析器,这里是 DocumentBuilder 类的link

      一旦您使用DocumentBuilder 中的parse 方法并获得您的Document,您就可以使用这样的函数将项目作为NodeList 获得:

          public static NodeList getNodesByName(Document doc, String nodeName)
          {
                  Element docEle = doc.getDocumentElement();
                  NodeList list = docEle.getElementsByTagName(nodeName);
                  return list;
          }
      

      在您的情况下,您将传入您通过解析 XML 创建的 Document 对象,然后将 question 作为您的 nodeName

      获得 NodeList 后,您可以使用 for 循环和 .item() 方法遍历它。

                  if(list != null && list.getLength() > 0) {
                      for(int i = 0 ; i < list.getLength();i++) {
                          Element element = (Element)list.item(i);
                          String textVal = element.getFirstChild().getNodeValue();
                          //Once you get the value you can put it into your
                          //array or just use it here.
                      }
                  }
      

      【讨论】:

        猜你喜欢
        • 2018-04-06
        • 2011-08-12
        • 2020-07-23
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多