xml - Golang XML 处理

标签 xml go encode unmarshalling

我正在尝试使用标准编码/xml 包在 Go 中处理具有复杂结构的 XML 文件,更改几个节点的值并保存交替文件。例如:

<description>
    <title-info>
        <genre>Comedy</genre>
        <author>
            <first-name>Kevin</first-name>
            <last-name>Smith</last-name>
        </author>
        <movie-title>Clerks</movie-title>
        <annotation>
            <p>!!!</p>
        </annotation>
        <keywords>comedy,jay,bob</keywords>
        <date></date>
    </description>
</title-info>

还有更多领域。我想更改节点:

<author>
    <first-name>Kevin</first-name>
    <last-name>Smith</last-name>
</author>

<author>
    <first-name>K.</first-name>
    <middle-name>Patrick</middle-name>
    <last-name>Smith</last-name>
</author>

但是,由于文件很大并且使用了超过 50 个标签,我真的不想描述完整的结构来解码它们,所以我有

type Result struct {
    Title   string   `xml:"description>title-info>movie-title"`
    Authors []Author `xml:"description>title-info>author"`
}

type Author struct {
    Fname string `xml:"first-name"`
    Mname string `xml:"middle-name"`
    Lname string `xml:"last-name"`
}

对于我需要使用的字段,但不知道如何保持文件的其余部分不变。看起来我需要使用 xml.decode 来选择我需要更改的节点(如 http://blog.davidsingleton.org/parsing-huge-xml-files-with-go/ 帖子),同时将不需要的标记跳过到 xml.encode,但我无法将此拼图转换为某些代码。

最佳答案

是否限制您只使用标准库?

如果没有,我会推荐 etree ( https://github.com/beevik/etree ),它将 DOM 置于标准库的 XML 处理之上。它有一个基本的 xpath 语法来选择节点,一旦有了它们,您就可以轻松地对其进行编辑。

关于xml - Golang XML 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104777/

相关文章:

PHP编码电子邮件地址

python - 在 Python 中,尝试使用第二个 RESX 的内容更新 RESX

java - 在将 XML 映射到 Java Bean 方面需要帮助

xml - 我如何在不结束该部分的情况下在 CDATA 部分中写入文字 "]]>"

sql - 如何使用用户名和密码打开数据库连接

mysql - 为什么 go-sql-driver 无法处理 MySQL bigint 字段中的 NULL?

android - 从strings.xml 中的另一个字符串引用一个字符串?

go - 使用 ZeroMQ 在 Go 中处理中断的惯用方法

android - 有没有办法在 Android 中重新编码 MP3 或任何其他音频文件?

java - 如何对 GZip Encoder.class 编码的 JSON 响应进行编码