I'm retrieving an XML string from an external web service that I do not control. Some of the data contains empty spaces <data> I have leading white space</data>
. How do I trim the space from each element within the XML string?
所有XML文本的TrimSpaces
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- duanhu7400 2019-01-08 18:11关注
You can use the primitives in the encoding/xml package to modify an XML stream on the fly. In this case implementing xml.TokenReader is a simple solution:
import ( "bytes" "encoding/xml" ) type Trimmer struct { dec *xml.Decoder } func (tr Trimmer) Token() (xml.Token, error) { t, err := tr.dec.Token() if cd, ok := t.(xml.CharData); ok { t = xml.CharData(bytes.TrimSpace(cd)) } return t, err }
Trimmer wraps an underlying decoder and returns a modified token stream.
xml.CharData
represents text nodes. Whenever one is encountered,bytes.TrimSpace
is called to trim leading and trailing whitespace. All other tokens are returned unmodified.xml.NewTokenDecoder
turnsTrimmer
back into a regular Decoder:import ( "encoding/xml" "fmt" "io" "log" ) var r io.Reader // data source raw := xml.NewDecoder(r) // regular decoder dec := xml.NewTokenDecoder(Trimmer{raw}) // trimming decoder var v MyType err := dec.Decode(&v)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大