我已经解析了一个 xml 文件,但我需要进一步拆分其中的一个字符串,我该怎么做?
I've parsed an xml file, but I need to further split a string within it, how do i do this?
我已经解析了一个 XML 提要,但我希望在其中一个标签内进一步解析数据,但不确定如何执行此操作?我在一个包中为此使用 XMLPullParser,然后信息存储在 Widgetclass 包中,然后使用广播接收器通过 inent 发送到我的 mainactivity。
目前代码只调用解析信息中的一个字段,调用多了会出现XML标签内容未排序的问题。我似乎无法在此处使用 split.String 方法,它应该在小部件 class 我必须存储信息还是在 mainactivity 中?
//解析器
public static WidgetClass[] parseFeed(字符串内容) {
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;
}
理想情况下,我想进一步拆分标签中的流,然后将它们放入数组中以传递到我的可视层。
您的字符串示例:
<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>
如您所见,字符串的所有部分都由“;”分隔。在这种情况下,您可以使用此字符拆分字符串:
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
访问每个部分
我已经解析了一个 XML 提要,但我希望在其中一个标签内进一步解析数据,但不确定如何执行此操作?我在一个包中为此使用 XMLPullParser,然后信息存储在 Widgetclass 包中,然后使用广播接收器通过 inent 发送到我的 mainactivity。
目前代码只调用解析信息中的一个字段,调用多了会出现XML标签内容未排序的问题。我似乎无法在此处使用 split.String 方法,它应该在小部件 class 我必须存储信息还是在 mainactivity 中?
//解析器 public static WidgetClass[] parseFeed(字符串内容) {
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;
}
理想情况下,我想进一步拆分标签中的流,然后将它们放入数组中以传递到我的可视层。
您的字符串示例:
<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>
如您所见,字符串的所有部分都由“;”分隔。在这种情况下,您可以使用此字符拆分字符串:
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