将 XML 数据解析为用户定义的对象、SAX 或 DOM

发布于 2024-12-15 05:25:16 字数 765 浏览 4 评论 0原文

我想创建一个简单的函数,如下所示:

vector <User> convertXMLDataToUserList (string xmlData) { …. }

假设 xmlData 如下所示:

<users>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <!-- …… More users -->
</users>

我需要将这些 xmlData 解析为 User 对象的集合。我想使用 QtXML 库来处理这个问题。 DOM 或 SAX 哪种 XML 解析方法更适合处理这个问题,为什么呢?

当然xml数据内容不会仅限于上面提到的用户属性,它还可以包含其他各种元素。 任何有关将 xml 数据解析为用户定义对象的示例/教程链接都将非常有帮助(使用 QtXML 库)。

I want to create a simple function as follow:

vector <User> convertXMLDataToUserList (string xmlData) { …. }

Let's say that the xmlData is something as follow:

<users>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <!-- …… More users -->
</users>

I need to parse these xmlData into a collection of User objects. I want to use the QtXML library to handle this. Which XML parsing approach be better to handle this, DOM or SAX, and why is that?

Of course the xml data content will not be limited to user attributes as mentioned above, but it can contain other various elements too.
Any example / tutorial links on parsing xml data to user defined objects will be really helpful (using QtXML library).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋千易 2024-12-22 05:25:16

首先阅读本文并选择您想要相应使用的

XML 解析
星期二, 十一月 6, 2012 · 发表于 android 项目, dom 解析, dom 解析代码, 解析, 响应解析, sax 解析, sax 解析代码, 源代码, web 服务代码, web 服务解析, xml, xml 解析, xmlpull 解析

JAXP :

JAXP 代表用于 xml 处理的 Java API。
它是 w3c 的规范。
JAXP 是来自 SUN 的 API。

使用JAXP api,我们可以通过两种方法处理xml文档。
DOM:
在处理之前将整个 xml 文档存储到内存中。
它占用的内存量较多。
它可以向任何方向移动。
树数据结构

使用 DOM 的步骤:

  1. 创建 documentBuilderFactory

    DocumentBuilderFactory工厂=
    DocumentBuilderFactory.newInstance();

  2. 创建文档生成器

    DocumentBuilder 构建器=工厂。 newDocumentBuilder();

    1. 获取输入流ClassLoader cls=DomReader.class.getClassLoader();
      InputStream is=cls.getResourceAsStream("xml 文件"); 4. 解析xml文件,通过调用parse方法获取Document对象
      在 DocumentBuilder 对象上。
      文档 document=builder.parse(is); 5.使用文档对象.SAX遍历dom树:
      简单的xml解析。
      它逐个节点解析
      遍历是从上到下
      内存使用率低
      使用 sax 无法进行后退导航。

    //实现所需的处理程序
    public class SaxParse extends DefaultHandler{ } //saxParserFactory 的新实例 SAXParserFactory factory=SAXParserFactory.newInstance();
    //SAX 解析器的新实例 SAXParser saxparser=factory.newSAXParser(); //解析xml文档
    SAXParser.parse(new File(要解析的文件), new SAXXMLParserImpl());

read this first and choose whatever you want to use accordingly

XML parsing
Tuesday, November 6, 2012 · Posted in android project, dom parsing, dom parsing code, parsing, response parsing, sax parsing, sax parsing code, source code, web service code, web service parsing, xml, xml parsing, xmlpull parsing

JAXP:

JAXP stands for Java API for xml processing.
It is a specification from w3c.
JAXP is an API from SUN.

using JAXP api, we can process xml document in two mthods.
DOM:
Stores the entire xml document into memory before processing.
It occupies more amount of memory.
It traverse in any direction.
Tree data structure

Steps to work with DOM:

  1. Create documentBuilderFactory

    DocumentBuilderFactory factory=
    DocumentBuilderFactory.newInstance();

  2. Create DocumentBuilder

    DocumentBuilder builder=factory. newDocumentBuilder();

    1. get input stream ClassLoader cls=DomReader.class.getClassLoader();
      InputStream is=cls.getResourceAsStream("xml file"); 4. parse xml file and get Document object by calling parse method
      on DocumentBuilder object.
      Document document=builder.parse(is); 5. Traverse dom tree using document object.SAX:
      Simple xml parsing.
      It parses node by node
      Traversing is from top to bottom
      Low memory usage
      Back navigation is not possible with sax.

    //implementing required handlers
    public class SaxParse extends DefaultHandler{ } //new instance of saxParserFactory SAXParserFactory factory=SAXParserFactory.newInstance();
    //NEW INSTANCE OF SAX PARSER SAXParser saxparser=factory.newSAXParser(); //Parsing xml document
    SAXParser.parse(new File(file to be parsed), new SAXXMLParserImpl());

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文