登录
首页 >  Golang >  Go问答

如何从不规范的动态XML中提取Golang中的XML命名空间

来源:stackoverflow

时间:2024-03-14 18:27:27 400浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何从不规范的动态XML中提取Golang中的XML命名空间》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

假设我有一个像这样的 xml


    
    
        
            
server connect to oracle server using golang and go-oci8 on ubuntu /go-oci8-oracle-linux/

我也有这样的常见结构

type envelope struct {
    XMLName xml.Name
    Attrs   []xml.Attr `xml:",any,attr"`
    Body    struct {
        InnerXML []byte `xml:",innerxml"`
    }
}

问题是如何在最外层包装器中获取单词 soap (来自 soap:envelope


正确答案


我不确定这个解决方案的局限性;请在评论中指出。

  1. 您可以按原样使用结构来捕获根节点的前缀 uri
  2. 获取属性切片,每个属性都有一个将 uri 映射到前缀名称的结构
  3. 迭代属性并尝试将每个属性的值与节点的前缀 uri 进行匹配,然后
  4. 保存属性的本地名称、前缀名称

(我认为这一切都是有道理的,我用正确的名字命名了正确的事物)

它看起来像这样:

var e envelope
xml.unmarshal(data, &e)

var rooturi, rootprefix string

rooturi = e.xmlname.space
for _, attr := range e.attrs {
    if attr.name.space == "xmlns" && attr.value == rooturi {
        rootprefix = attr.name.local
        break
    }
}

fmt.println(rootprefix, rooturi)

当我使用示例 xml 运行它时,它会打印:

soap http://schemas.xmlsoap.org/soap/envelope/

这是完整的演示,https://go.dev/play/p/x3FKfkCW64x

到这里,我们也就讲完了《如何从不规范的动态XML中提取Golang中的XML命名空间》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>