使用 SimpleXML 读取 XML

Posted

技术标签:

【中文标题】使用 SimpleXML 读取 XML【英文标题】:Reading XML with SimpleXML 【发布时间】:2012-11-01 16:36:25 【问题描述】:

您好,谁能告诉我如何使用 SimpleXML 读取 xml 标签及其值。我正在构建一个安卓应用程序。

我需要获取根元素内的所有标签和值:

<RootElement>
   <UnknownTab>UnkownValue</UnkownTab>
   <AnotherUnknownTab>UnkownValue</AnotherUnknownTab>
</RootElement>

RootElement 中的元素数量也是未知的,并且每次都可能不同。

更新:

我已经将 SimpleXml 用于我正在执行的所有其他序列化,因此我不想使用另一个 XML 解析工具。 问题是如何使用 SimpleXml 做到这一点,而不是如何序列化 xml。

更新 2: 我已经查看了 XML(它有点复杂),定义如下:

xsd 定义:

<element-sequence> 
   <element name="actualName" ..../>
   <element name="actualName" ..../>
   <element name="actualName" ..../>
   .
   .
   .
</element-sequence>

元素序列的大小是可变的 并且 RootElement 内元素的标签是实际名称

<RootElement>
   <actualName>UnkownValue</actualName>
   <actualName>UnkownValue</actualName>
   .
   .
   .
</RootElement>

有没有办法序列化这个,如果可能的话,使用 SimpleXML

【问题讨论】:

XmlPullParser 似乎是要走的路:developer.android.com/training/basics/network-ops/xml.html 【参考方案1】:

看看非常简单的教程可能会对您有所帮助:Java and XML 和 Parsing XML Data

【讨论】:

【参考方案2】:

您可以使用Android的SAXParser来解析String。 Parser 的XMLReader 所需的 InputSource 需要输入流,因此您必须将 String 转换为输入流。您可以为此使用ByteArrayInputStream

InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );

另见:

Convert String into Strim

Android Parsing XML using SAX Parser

【讨论】:

【参考方案3】:

使用 SimpleXML 看起来这是不可能的,使用 XPath 完成了这项工作。

【讨论】:

【参考方案4】:

您可能想使用Visitor Strategy

重写“读取”方法:

@Override
public void read(Type type, NodeMap<InputNode> node) throws Exception 

让您可以访问 NodeMap。使用 node.getNode() 您可以检索实际的当前 InputNode 和例如查询它的名称和值。您可能需要确保在 RootElement 注释中使用了“strict=false”,以确保没有为非映射标签引发异常。

【讨论】:

以上是关于使用 SimpleXML 读取 XML的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 simplexml_load_string 读取 XML 文件

simplexml_load_string()不会读取标签中带有“soap:”的soap响应[重复]

simplexml_load_file 通过 url 读取远程 xml,由对等方重置连接

使用simplexml处理xml文件的Tips

xml 元素中的属性不在 simplexml 数组中

PHP 5 SimpleXML 函数