xml - 使用 golang 解析 tei XML

标签 xml go

我需要用 golang 解析一个 tei XML 文件。我尝试使用 encoding/xml unmarshaller。这是示例: http://play.golang.org/p/h0k-4IjngY

问题:

  1. 即使 tei 文件无效且 xml 有效,该示例也不会返回任何内容。如果我删除第 23 行 <TEI> (所以 xml 不再有效),该示例打印了一些内容。
  2. 如何让 Line 构造一个包含 <l> 内容的字符串?元素?
  3. 在 Page 结构中,我需要 n 的值属性,我该如何实现?

解码是解析此类文件的正确方法还是 nokogiri 是更好的解决方案?

谢谢

最佳答案

使用 xml.Unmarshal() 读取此 XML 完全没问题.

问题是 XML 结构如下:

<TEI>
    <text>
        <sp>
        </sp>
        <sp>
        </sp>
    </text>
</TEI>

你的 Go 结构如下:

Page
    []Speak

少了一层。你的Page可能匹配 <TEI><text>元素,但不是两者。如果您删除 <TEI> 它对您有用元素因为那时Page可以匹配 <text>及其内容。

解决方案:

像这样添加另一个包装器:

type Text struct {
    Txt Page `xml:"text"`
}

当然还有解析这种类型的值:

var p Text
err := xml.Unmarshal([]byte(data), &p)

Go Playground 上尝试修改后的代码.

关于xml - 使用 golang 解析 tei XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811899/

相关文章:

go - time since 格式为天、时、分、秒

go - 当没有定义 $GOPATH 时,如何查找安装了 'go get -u' 的 Go 包?

php - 如何在 PHP 中验证 XML 的 CDATA 部分

xml - 使用xPath查找子节点的值

java - 启动我的 Android 应用程序显示错误日志 cat 没有帮助?

javascript - 一次加载全部 XML 还是一点一点加载更快?

sockets - 去: socket library to get hostname

go - 在 Windows 上安装 gokogiri 时找不到错误 libxml2

json - 语言 |解码任意数据

Android imagebutton 以编程方式更改?