Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用XMLPullParsing获取xml中的子标记或子标记_Android_Xml_Xmlpullparser - Fatal编程技术网

如何在android中使用XMLPullParsing获取xml中的子标记或子标记

如何在android中使用XMLPullParsing获取xml中的子标记或子标记,android,xml,xmlpullparser,Android,Xml,Xmlpullparser,我在android中使用XmlPullParser解析XML文件。当我的xml中没有子标记时,它可以正常运行,我只需使用XmlPullParse.START_tag检查起始标记并获得适当的属性值,但我遇到了一个问题,这里一个标记有另一个子标记,在这个子标记中有一个包含图像链接的属性。我无法从该子标记中提取该链接 以下是我的XML:- <section name="section1"> <photo id="1" ilink="ImageLink 1"/>

我在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”的部分的照片标签,那么我该怎么做呢

请帮我整理一下。任何帮助都是值得的

提前感谢。

您可以编写一个xsl


在xml上运行xsl,输出将是 第1节中的链接1是图像链接1 ..
第2节中的链接4是ImageLink 2,这应该适用于您的Android应用程序

MainActivity.java

公共类MainActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//样品
SampleXMLPullParser.GetLinks(“section2”);
}
}
SampleXMLPullParser.java

package.com.example;
导入java.io.StringReader;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserFactory;
公共类SampleXMLPullParser{
公共静态void GetLinks(字符串节\u名称){
试一试{
//获取解析器
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
XmlPullParser xpp=factory.newPullParser();
//XML数据
最终字符串标记_SECTION=“SECTION”;
最后一个字符串标记\u节\u ATTR\u NAME=“NAME”;
最终字符串标记_PHOTO=“PHOTO”;
最后一个字符串TAG\u PHOTO\u ATTR\u LINK=“ilink”;
最后一个字符串inputXML=“”
+       ""
+   ""    
+ ""
+ ""
+   ""
+   ""    
+ "";
//设置输入
setInput(新的StringReader(inputXML));
int eventType=xpp.getEventType();
//解析器循环,直到文档结束
布尔校正部分=假;
while(eventType!=XmlPullParser.END_文档){
//读取标签名
字符串标记名=xpp.getName();
//检查事件类型
if(eventType==XmlPullParser.START_标记){
//检查“区段”标签
if(标记名.equalsIgnoreCase(标记部分)){
//打开标签,检查属性
字符串attrvalue=xpp.getAttributeValue(null,TAG\u SECTION\u ATTR\u NAME);
if(attrvalue.equals(节名称)){
//我们感兴趣的部分
correctSection=true;
}
}
//检查“照片”标签(仅适用于提供的部分)
if(correctSection&&tagname.equalsIgnoreCase(标记\照片)){
//读取属性并在控制台上打印
字符串attrvalue=xpp.getAttributeValue(空,标记\u照片\u ATTR\u链接);
系统输出打印项次(属性值);
}
}else if(eventType==XmlPullParser.END_标记){
//关闭“区段”标签
if(correctSection&&tagname.equalsIgnoreCase(TAG_SECTION))
更正部分=错误;
}
//转到下一个活动
eventType=xpp.next();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
这应该在调试输出上打印与传递给函数的节参数相对应的两个链接

当然,你可以按照你想要的方式进行调整

<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>