猿问

所有 XML 文本的 TrimSpaces

我正在从我无法控制的外部 Web 服务中检索 XML 字符串。一些数据包含空格<data>    I have leading white space</data>。如何修剪 XML 字符串中每个元素的空格?



万千封印
浏览 127回答 2
2回答

www说

您可以使用 encoding/xml 包中的原语动态修改 XML 流。在这种情况下,实施xml.TokenReader是一个简单的解决方案: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 包装底层解码器并返回修改后的令牌流。xml.CharData表示文本节点。每当遇到一个时,bytes.TrimSpace都会调用修剪前导和尾随空格。所有其他标记均原封不动地返回。xml.NewTokenDecoder变Trimmer回常规解码器:import (    "encoding/xml"    "fmt"    "io"    "log")var r io.Reader                          // data sourceraw := xml.NewDecoder(r)                 // regular decoderdec := xml.NewTokenDecoder(Trimmer{raw}) // trimming decodervar v MyTypeerr := dec.Decode(&v)

慕码人8056858

根据数据的外观,这很容易>不起作用,但是如果数据是可预测的并且除了 XML 标记之外不会包含任何地方,您可以这样做:https://play.golang.org/p/4YSpvLFwHjZpackage mainimport (&nbsp; "fmt"&nbsp; "regexp")func main() {&nbsp; r := regexp.MustCompile(">(\\s*)")&nbsp; xml := "<test>&nbsp; &nbsp;hello</test><test>&nbsp; There</test><test>!</test>"&nbsp; xml = r.ReplaceAllString(xml, ">")&nbsp; fmt.Println(xml)}
随时随地看视频慕课网APP

相关分类

Go
我要回答