我需要用 golang 解析一个 tei XML 文件。我尝试使用 encoding/xml unmarshaller。这是示例: http://play.golang.org/p/h0k-4IjngY
问题:
- 即使 tei 文件无效且 xml 有效,该示例也不会返回任何内容。如果我删除第 23 行
<TEI>
(所以 xml 不再有效),该示例打印了一些内容。 - 如何让 Line 构造一个包含
<l>
内容的字符串?元素? - 在 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/