2017-06-16 49 views
0

我得到了下面的打印語句的空白輸出。僅用於第二個打印語句,我得到了xml結構。是我的結構的問題?我使用Chidley生成了結構(https://github.com/gnewton/chidley)。去編組返回一個空白輸出

package main 

import (
    "encoding/xml" 
    "fmt" 
    "io/ioutil" 
    "os" 
) 

type Query struct { 
    rpc Rpc_reply `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 rpc-reply,omitempty" json:"rpc-reply,omitempty"` 
} 

type Addr_tag_list struct { 
    Addr_tag Addr_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 addr,omitempty" json:"addr,omitempty"` 
    Pref_tag Pref_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 pref,omitempty" json:"pref,omitempty"` 
    Tag Tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 tag,omitempty" json:"tag,omitempty"` 
    Type_tag Type_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 type,omitempty" json:"type,omitempty"` 
    VpcPeer_tag VpcPeer_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 vpcPeer,omitempty" json:"vpcPeer,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 Addr-list,omitempty" json:"Addr-list,omitempty"` 
} 

type Dom_list struct { 
    If_items If_items `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 if-items,omitempty" json:"if-items,omitempty"` 
    Name_tag Name_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 name,omitempty" json:"name,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 Dom-list,omitempty" json:"Dom-list,omitempty"` 
} 

type If_list struct { 
    Addr_items_tag Addr_items_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 addr-items,omitempty" json:"addr-items,omitempty"` 
    Id_tag Id_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 id,omitempty" json:"id,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 If-list,omitempty" json:"If-list,omitempty"` 
} 

type Systemtag struct { 
    Ipv4_items Ipv4_items `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 ipv4-items,omitempty" json:"ipv4-items,omitempty"` 
    Test_name Test_name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 test-name,omitempty" json:"test-name,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 System,omitempty" json:"System,omitempty"` 
} 

type Addr_tag struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 addr,omitempty" json:"addr,omitempty"` 
} 

type Addr_items_tag struct { 
    Addr_tag_list Addr_tag_list `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 Addr-list,omitempty" json:"Addr-list,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 addr-items,omitempty" json:"addr-items,omitempty"` 
} 

type Data_tag struct { 
    Systemtag Systemtag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 System,omitempty" json:"System,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 data,omitempty" json:"data,omitempty"` 
} 

type Dom_items struct { 
    Dom_list []Dom_list `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 Dom-list,omitempty" json:"Dom-list,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 dom-items,omitempty" json:"dom-items,omitempty"` 
} 

type Id_tag struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 id,omitempty" json:"id,omitempty"` 
} 

type If_items struct { 
    If_list []If_list `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 If-list,omitempty" json:"If-list,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 if-items,omitempty" json:"if-items,omitempty"` 
} 

type Inst_items struct { 
    Dom_items Dom_items `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 dom-items,omitempty" json:"dom-items,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 inst-items,omitempty" json:"inst-items,omitempty"` 
} 

type Ipv4_items struct { 
    Inst_items Inst_items `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 inst-items,omitempty" json:"inst-items,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 ipv4-items,omitempty" json:"ipv4-items,omitempty"` 
} 

type Name_tag struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 name,omitempty" json:"name,omitempty"` 
} 

type Pref_tag struct { 
    Text bool `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 pref,omitempty" json:"pref,omitempty"` 
} 

type Rpc_reply struct { 
    Attr_message_id string `xml:" message-id,attr" json:",omitempty"` 
    Attr_xmlns string `xml:" xmlns,attr" json:",omitempty"` 
    Data_tag Data_tag `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 data,omitempty" json:"data,omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 rpc-reply,omitempty" json:"rpc-reply,omitempty"` 
} 

type Tag struct { 
    Text bool `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 tag,omitempty" json:"tag,omitempty"` 
} 

type Type_tag struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 type,omitempty" json:"type,omitempty"` 
} 

type VpcPeer_tag struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 vpcPeer,omitempty" json:"vpcPeer,omitempty"` 
} 

type Test_name struct { 
    Text string `xml:",chardata" json:",omitempty"` 
    XMLName xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 test-name,omitempty" json:"test-name,omitempty"` 
} 


func main() { 
    xmlFile, err := os.Open("interface.xml") 
    if err != nil { 
     fmt.Println("Error opening file:", err) 
     return 
    } 
    defer xmlFile.Close() 

    b, _ := ioutil.ReadAll(xmlFile) 

    var q Query 
    err2 := xml.Unmarshal(b, &q) 
    if err2 != nil { 
     fmt.Printf("error: %v", err2) 
     return 
    } 
    fmt.Println(q) 
    //fmt.Printf("%#v",q) 
    fmt.Printf("%s",q.rpc.Attr_message_id); 

} 

的interface.xml文件的示例是:

<?xml version="1.0" encoding="UTF-8"?> 
 
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> 
 
    <data> 
 
    <System> 
 
    <test-name>##WORK##</test-name> 
 
     <ipv4-items> 
 
     <inst-items> 
 
      <dom-items> 
 
      <Dom-list> 
 
       <name>default</name> 
 
       <if-items> 
 
       <If-list> 
 
        <id>eth5/8</id> 
 
        <addr-items> 
 
        <Addr-list> 
 
         <addr>1.1.1.1</addr> 
 
         <pref>1</pref> 
 
         <tag>0</tag> 
 
         <type>primary</type> 
 
         <vpcPeer>0.0.0.0</vpcPeer> 
 
        </Addr-list> 
 
        </addr-items> 
 
       </If-list> 
 
       </if-items> 
 
       </Dom-list> 
 
       <Dom-list> 
 
       <name>management</name> 
 
       <if-items> 
 
       <If-list> 
 
        <id>eth5/8</id> 
 
        <addr-items> 
 
        <Addr-list> 
 
         <addr>11.11.11.11</addr> 
 
         <pref>1</pref> 
 
         <tag>0</tag> 
 
         <type>primary</type> 
 
         <vpcPeer>0.0.0.0</vpcPeer> 
 
        </Addr-list> 
 
        </addr-items> 
 
       </If-list> 
 
       </if-items> 
 
       </Dom-list> 
 
       </dom-items> 
 
     </inst-items> 
 
     </ipv4-items> 
 
    </System> 
 
    </data> 
 
</rpc-reply>

您可以加載XML數據http://countwordsfree.com/xmlviewer以獲得更好的視野

回答

0

問題是結構你重新傳遞在XML層次結構中沒有元素(XMLName xml.Name映射)。

更改這兩行TO-

var rpc Rpc_reply 
err2 := xml.Unmarshal(b, &rpc) 
+0

那是愚蠢的我!謝謝 :) – Bazinga