2015-03-02 40 views
1

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

问题:

  1. 即使亭文件是无效的,而且XML是有效的示例返回我什么。如果我删除第23行<TEI>(因此xml不再有效),该示例将打印一些内容。
  2. 如何让Line结构中包含<l>元素的内容的字符串?
  3. 在Page结构中,我需要n属性的值,我该如何实现?

解组这些文件的正确方法或nokogiri会是一个更好的解决方案吗?

感谢

回答

0

这是完全正常的读取使用xml.Unmarshal()这个XML。

的问题是,XML结构如下:

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

而且你的围棋结构如下:

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您的修改后的代码。