【问题标题】:I've parsed an xml file, but I need to further split a string within it, how do i do this?我已经解析了一个 xml 文件,但我需要在其中进一步拆分一个字符串,我该怎么做?
【发布时间】:2019-09-04 10:49:03
【问题描述】:

我已经解析了一个 XML 提要,但我希望在其中一个标签内进一步解析数据,但不确定如何执行此操作?我在一个包中为此使用 XMLPullParser,然后将信息存储在一个 Widgetclass 包中,然后使用广播接收器通过一个 inent 将其发送到我的 mainactivity。

目前代码只调用了解析信息的一个字段,但是调用更多会出现XML Tag的内容未排序的问题。我似乎无法在这里使用 split.String 方法,它应该在我必须存储信息的小部件类中还是在 mainactivity 中?

//解析器 public static WidgetClass[] parseFeed(String content) {

    try {

        boolean inItemTag = false;
        String currentTagName = "";
        WidgetClass currentItem = null;
        List<WidgetClass> itemList = new ArrayList<>();

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser parser = factory.newPullParser();
        parser.setInput(new StringReader(content));

        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {

            switch (eventType) {
                case XmlPullParser.START_TAG:
                    currentTagName = parser.getName();
                    if (currentTagName.equals("item")) {
                        inItemTag = true;
                        currentItem = new WidgetClass();
                        itemList.add(currentItem);
                    }
                    break;

                case XmlPullParser.END_TAG:
                    if (parser.getName().equals("item")) {
                        inItemTag = false;
                    }
                    currentTagName = "";
                    break;

                case XmlPullParser.TEXT:
                    String text = parser.getText();
                    if (inItemTag && currentItem != null) {
                        try {
                            switch (currentTagName) {
                                case "title":
                                    currentItem.setTitle(text);
                                    break;
                                case "description":
                                    currentItem.setDescription(text);
                                    break;
                                case "link":
                                    currentItem.setLink(text);
                                    break;
                                case "pubDate":
                                    currentItem.setPubDate(text);
                                    break;
                                case "category":
                                    currentItem.setCatagory(text);
                                    break;
                                case "geo:lat":
                                    currentItem.setGeoLat(Double.parseDouble(text));
                                case "geo:long":
                                    currentItem.setGeoLong(Double.parseDouble(text));
                                default:
                                    break;
                            }
                        } catch (NumberFormatException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
            }

            eventType = parser.next();

        } // end while loop


       WidgetClass[] widgetClasses = new WidgetClass[itemList.size()];
        return itemList.toArray(widgetClasses);

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

理想情况下,我想进一步从标签中拆分流,然后将它们放入数组中以传递给我的可视层。

【问题讨论】:

  • 您能否提供一个示例,说明您想要拆分哪些文本以及哪些是所需的结果?
  • 这是要拆分的文本示例: 来源日期/时间:Thu, 14 Feb 2019 07:43:33 ;地点:新迪盖特,萨里;纬度/经度:51.163,-0.250;深度:2公里;数量级:2.4 希望将其拆分为 ;在每个条目之间并将其放入数组中

标签: java android xmlpullparser


【解决方案1】:

你的字符串示例:

<description> Origin date/time: Thu, 14 Feb 2019 07:43:33 ; Location: NEWDIGATE,SURREY ; Lat/long: 51.163,-0.250 ; Depth: 2 km ; Magnitude: 2.4 </description> 

如您所见,字符串的所有部分都由“;”分隔。在这种情况下,您可以使用此 char 来拆分字符串:

String[] textParts = text.split(";");

然后,每个部分都包含字符串的所需部分

partsCounts = textParts.length; // number of parts
textParts[0] => " Origin date/time: Thu, 14 Feb 2019 07:43:33 "
textParts[1] => " Location: NEWDIGATE,SURREY "
textParts[2] => "  Lat/long: 51.163,-0.250 "
textParts[3] => " Depth: 2 km "
testParts[4] => "  Magnitude: 2.4 "

如果您还要编辑xml 文件,我建议您像这样编辑它

<description> 
    <origin>Thu, 14 Feb 2019 07:43:33</origin>
    <location>NEWDIGATE,SURREY</location>
    <lat>51.163,-0.250</lat>
    <depth>2 km</depth>
    <magnitude>2.4</magnitude>
</description>

所以,您可以通过XmlPullParser直接访问每个部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多