我在android中使用XmlPullParser来解析XML文件。当我的xml中没有子标签时它运行正常,我只是使用XmlPullParse.START_TAG
检查起始标签并获取相应的属性值,但是我遇到了问题,这里一个标签有另一个子标签,在此子标记中,有一个包含图像链接的属性。我无法从该子标记中提取该链接。
这是我的XML: -
<section name="section1">
<photo id="1" ilink="ImageLink 1"/>
<photo id="2" ilink="ImageLink 2"/>
</section>
<section name="section2">
<photo id="3" ilink="ImageLink 1"/>
<photo id="4" ilink="ImageLink 2"/>
</section>
我得到的是“section”的父标签,其属性是“name”但是如何根据section name获取“photo”标签?那就是如果我想解析名为“section2”的部分的照片标签,那么我该怎么做呢????
请帮我解决一下。任何帮助都会很明显。
提前致谢。
答案 0 :(得分:2)
你可以写一个xsl
<xsl:template match="/">
<xsl:for-each select="section">
<xsl:value-of select="concat('link ',photo@id, ' from ',@name,' is ',photo@ilink)"><xsl:value-of>
</xsl:for-each>
</xsl:template>
在xml上运行xsl,输出结果为 第1节中的链接1是ImageLink 1 .. 第2节中的链接4是ImageLink 2
答案 1 :(得分:1)
这应该适用于您的Android应用程序。
<强> MainActivity.java 强>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Sample
SampleXMLPullParser.GetLinks("section2");
}
}
<强> SampleXMLPullParser.java 强>
package com.example;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
public class SampleXMLPullParser {
public static void GetLinks (String section_name) {
try {
// Get the parser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// XML data
final String TAG_SECTION = "section";
final String TAG_SECTION_ATTR_NAME = "name";
final String TAG_PHOTO = "photo";
final String TAG_PHOTO_ATTR_LINK = "ilink";
final String inputXML = "<section name=\"section1\">"
+ "<photo id=\"1\" ilink=\"ImageLink 1\"/>"
+ "<photo id=\"2\" ilink=\"ImageLink 2\"/>"
+ "</section>"
+ "<section name=\"section2\">"
+ "<photo id=\"3\" ilink=\"ImageLink 3\"/>"
+ "<photo id=\"4\" ilink=\"ImageLink 4\"/>"
+ "</section>";
// Set the input
xpp.setInput(new StringReader(inputXML));
int eventType = xpp.getEventType();
// Parser loop until end of the document
boolean correctSection = false;
while (eventType != XmlPullParser.END_DOCUMENT) {
// Read the tag name
String tagname = xpp.getName();
// Check the event type
if (eventType == XmlPullParser.START_TAG) {
// Check 'section' tags
if (tagname.equalsIgnoreCase(TAG_SECTION)) {
// Opening tag, check the attribute
String attrvalue = xpp.getAttributeValue(null, TAG_SECTION_ATTR_NAME);
if (attrvalue.equals(section_name)) {
// Section we're interested to
correctSection = true;
}
}
// Check 'photo' tags (only for the provided section)
if (correctSection && tagname.equalsIgnoreCase(TAG_PHOTO)) {
// Read the attribute and print on console
String attrvalue = xpp.getAttributeValue(null, TAG_PHOTO_ATTR_LINK);
System.out.println(attrvalue);
}
} else if (eventType == XmlPullParser.END_TAG) {
// Closing 'section' tag
if (correctSection && tagname.equalsIgnoreCase(TAG_SECTION))
correctSection = false;
}
// Move to next event
eventType = xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这应该在Debug输出上打印两个与你传递给函数的section参数对应的链接。
当然,您可以按照自己的方式进行调整。