1 回答

TA貢獻1796條經驗 獲得超4個贊
對于初學者,您沒有正確使用屬性 struct 標簽,所以這是一個簡單的解決方法。
如果 XML 元素具有先前規則未處理的屬性,并且結構具有包含“,any,attr”的關聯標記的字段,則 Unmarshal 會在第一個此類字段中記錄屬性值。
其次,因為標記xml:",chardata"
甚至不通過接口傳遞該字段UnmarshalXML
,xml.Unmarshaller
所以您不能簡單地為它創建一個新類型Text
并為它實現該接口,如同一文檔中所述。(注意除 []byte 或 string 以外的任何類型都會強制報錯)
如果 XML 元素包含字符數據,則該數據將累積在具有標記“,chardata”的第一個結構字段中。struct 字段的類型可以是 []byte 或 string。如果沒有這樣的字段,字符數據將被丟棄。
因此,處理不需要的字符的最簡單方法是在事后替換它們。
var Replacer = strings.NewReplacer("
","","	","","\n","","\t","")
func recursiveReplace(n *Node) {
? ? n.Text = Replacer.Replace(n.Text)
? ? for i := range n.Children {
? ? ? ? recursiveReplace(&n.Children[i])
? ? }
}
理論上可以實現xml.Unmarshaller的接口Node,但是您不僅要處理手動 xml 解析,還要處理它是遞歸結構這一事實。事后刪除不需要的字符是最簡單的。
- 1 回答
- 0 關注
- 148 瀏覽
添加回答
舉報