使用 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响应[重复]