如何使用 go 读取 RDF xml 文件中的 XML 命名空间属性

问题描述 投票:0回答:1

我正在尝试解析以下 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:eu="http://iec.ch/TC57/CIM100-European#"
    xmlns:md="http://iec.ch/TC57/61970-552/ModelDescription/1#"
    xmlns:cim="http://iec.ch/TC57/CIM100#" > 
  <md:FullModel rdf:about="urn:uuid:52a409c9-72d8-4b5f-bf72-9a22ec9353f7">
   ......

使用 go

xml.NewDecoder(file).Decode(&model)
方法。我能够获取所有“FullModel”和所有以下项目,但是我无法弄清楚如何获取这些命名空间字符串值:xmlns:rdf、xmlns:eu ...

我的代码:https://go.dev/play/p/qF_2er47_3R

我的代码有什么问题?

xml go rdf
1个回答
0
投票

要从 XML 生成 Go 结构,您可以使用生成器,例如 miku/zek。还有在线版本。 此代码应该按预期工作:https://go.dev/play/p/xUShK1Wpk8g

您的根节点是

RDF
FullModel
它的子节点,但是您描述的
FullModel
与结构中的
RDF
处于同一级别。

如果需要为根节点设置名称,可以使用

xml.Name
结构字段类型。根据 encoding/xml 的文档:

XML 元素的名称按优先顺序取自:

XMLName 字段上的标记,如果数据是结构体,则为该值 XMLName field of type Name 用于获取的结构体字段的标签 数据 用于获取数据的结构体字段的名称 编组型

您的代码:

type RDF struct {
    Rdf string `xml:"rdf,attr"`
    Eu  string `xml:"eu,attr"`
    Md  string `xml:"md,attr"`
    Cim string `xml:"cim,attr"`
}

type File_model struct {
    RDF   RDF       `xml:"RDF"`
    Model FullModel `xml:"FullModel"`
}

生成的结构:

type RDF struct {
    XMLName   xml.Name `xml:"RDF"`
    Text      string   `xml:",chardata"`
    Rdf       string   `xml:"rdf,attr"`
    Eu        string   `xml:"eu,attr"`
    Md        string   `xml:"md,attr"`
    Cim       string   `xml:"cim,attr"`
    FullModel struct {
        Text                      string `xml:",chardata"`
        About                     string `xml:"about,attr"`
        ...
    } `xml:"FullModel"`
    AccumulatorLimit struct {
        Text                        string `xml:",chardata"`
        ID                          string `xml:"ID,attr"`
        ...
}
© www.soinside.com 2019 - 2024. All rights reserved.