当前位置: 首页 > 面试题库 >

Go中的通用XML解析器

傅彬
2023-03-14
问题内容

在Go中有一些读取XML文档的通用方法吗?类似于C#中的XmlDocument或XDocument吗?

我发现的所有示例都显示了如何使用解编组功能将其读取到需要定义的对象中,但是这非常耗时,因为我需要定义很多我不打算使用的人员。

xml.Unmarshal(...)

另一种方法是仅使用以下方法转发阅读:

xml.NewDecoder(xmlFile)

在这里描述:http :
//blog.davidsingleton.org/parsing-huge-xml-files-with-
go/


问题答案:

我发现的所有示例都显示了如何使用解编组功能将其读取到需要定义的对象中,但是这非常耗时,因为我需要定义很多我不打算使用的人员。

然后 ,不要 定义不使用的内容,而 定义要使用的内容。您不必创建完全覆盖XML结构的Go模型。

假设您有这样的XML:

<blog id="1234">
    <meta keywords="xml,parsing,partial" />
    <name>Partial XML parsing</name>
    <url>http://somehost.com/xml-blog</url>
    <entries count="2">
        <entry time="2016-01-19 08:40:00">
            <author>Bob</author>
            <content>First entry</content>
        </entry>
        <entry time="2016-01-19 08:30:00">
            <author>Alice</author>
            <content>Second entry</content>
        </entry>
    </entries>
</blog>

并假设您仅需要此XML中的以下信息:

  • ID
  • 关键字
  • 博客名称
  • 作者姓名

您可以使用以下结构对这些所需的信息进行建模:

type Data struct {
    Id   string `xml:"id,attr"`
    Meta struct {
        Keywords string `xml:"keywords,attr"`
    } `xml:"meta"`
    Name    string   `xml:"name"`
    Authors []string `xml:"entries>entry>author"`
}

现在,您可以使用以下代码仅解析这些信息:

d := Data{}
if err := xml.Unmarshal([]byte(s), &d); err != nil {
    panic(err)
}
fmt.Printf("%+v", d)

输出(在Go Playground上尝试):

{Id:1234 Meta:{Keywords:xml,parsing,partial} Name:Partial XML parsing Authors:[Bob Alice]}


 类似资料:
  • 问题内容: 我目前正在解析XML,但是我不太确定如何解析“消息”的“状态”属性: 这是代码,我切断了所有不必要的内容: 谁能指导我该如何完成? 提前致谢。 问题答案: Node.getAttributes() 如果使用XPATH检索数据,则可以避免遍历。阅读本教程。

  • 问题内容: 我想使用python解析一个简单的小型XML文件,但是在pyXML上的工作似乎已经停止了。如果可能的话,我想使用python 2.6。谁能推荐可以与2.6兼容的XML解析器? 谢谢 问题答案: 如果它既小又简单,则只需使用标准库即可: 这将返回实现标准文档对象模型API的DOM树 如果以后需要执行诸如模式验证或XPath查询之类的复杂操作,那么我建议使用第三方lxml模块,它是流行的l

  • 问题内容: 我正在尝试解析由tar生成的时间戳,例如“ 2011-01-19 22:15”,但无法计算出time.Parse的时髦API。 以下产生“解析时间“ 2011-01-19 22:15”:超出范围的月份” 问题答案: 请遵循Go 时间包文档中的说明。 布局中使用的标准时间为: 2006年1月2日星期一1:04:05 MST(MST是GMT-0700) 现在是Unix时间。(将其视为。)要

  • 本文向大家介绍用PHP解析XML,包括了用PHP解析XML的使用技巧和注意事项,需要的朋友参考一下 XML数据提取可能是一项常见的任务,但是要直接使用此数据,您需要了解PHP如何解析XML。在PHP中解析XML涉及各种不同的功能,所有这些功能协同工作以从XML文档中提取数据。我将完成所有这些功能,并在最后将它们联系在一起。 xml_parser_create() 此函数用于创建解析器对象,该对象将

  • 问题内容: 我正在尝试分析Go中的XML: 输出: 虽然我期望它会产生: 如何获得第一个标签的内容(即没有名称空间的标签)? 问题答案: 我不认为xml解码器可以指定一个元素不应该带有struct标签的名称空间。但是我确实知道它可以为您检索有关名称空间的信息,然后可以对数据进行后期处理以得到相同的结果: http://play.golang.org/p/aDEFPmHPc0

  • 问题内容: 我正在尝试使用Groovy和Java的ScriptEngine API解析XML。下面的代码正是这样做的,但是我想知道是否有更好的方法可以做到这一点。还有与此相关的性能影响吗? 输出: 问题答案: 您的Groovy脚本可能是 “ groovy-er” … 这做同样的事情: 确实,您可以使用而不是JVM脚本引擎,这可以使您了解: