我有多个测试用例通过,但是这个失败了。我在这里遗漏了什么导致解码器错误地读取我的目标键的内容?const respGenericFault1 = `<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> <faultstring xsi:type="xsd:string">Failed to validate</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body></SOAP-ENV:Envelope>`type Fault struct { FaultCode, FaultString string}func (f Fault) Error() string { return "Fault Code: '" + f.FaultCode + "' FaultString: '" + f.FaultString + "'"}func ParseFault(b []byte) error { reader := bytes.NewReader(b) d := xml.NewDecoder(reader) var start xml.StartElement fault := Fault{} found := false // iterate through the tokens for { tok, _ := d.Token() if tok == nil { break } // switch on token type switch t := tok.(type) { case xml.StartElement: start = t.Copy() fmt.Println(start.Name.Local) case xml.CharData: key := strings.ToLower(start.Name.Local) // fault was found, capture the values and mark as found if key == "faultcode" { found = true fault.FaultCode = string(t) fmt.Printf("%#v\n", string(t)) } else if key == "faultstring" { found = true fault.FaultString = string(t) } } } if found { return fault } return nil}func main() { err := ParseFault([]byte(respGenericFault1)) fmt.Printf("%#v\n", err)}这是游乐场网址:http : //play.golang.org/p/7PFPNsmast
1 回答
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消