2014-12-10 2 views
1

Я хотел бы выделить значение атрибута X конкретного узла N в поле структуры. Что-то вроде этого:Перейти XML-атрибут Unmarshalling X узла N

var data = `<A id="A_ID"> 
<B id="B_ID">Something</B> 
</A> 
` 

type A struct { 
    Id string `xml:"id,attr"` // A_ID 
    Name string `xml:"B.id,attr"` // B_ID 
} 

http://play.golang.org/p/U6daYJWVUX

Насколько я смог check это не поддерживается Go. Правильно ли я, или я что-то пропустил?

ответ

2

На ваш вопрос вы не упомянули B. Я предполагаю, что вам нужно развязать его attr в A.Name? Если да - вы можете изменить на структуру, чтобы что-то вроде этого:

type A struct { 
    Id string `xml:"id,attr"` // A_ID 
    Name struct { 
     Id string `xml:"id,attr"` // B_ID 
    } `xml:"B"` 
} 

Или, может быть, даже лучше - определить отдельную B-структуру:

type A struct { 
    Id string `xml:"id,attr"` // A_ID 
    Name B `xml:"B"` 
} 

type B struct { 
    Id string `xml:"id,attr"` // B_ID 
} 
+0

Я знаю, что можно маршализацию это несколько структур, но , как я показал в примере кода по моему вопросу, я хочу сделать это, не реплицируя эту иерархию, иначе, когда у вас будет несколько уровней зависимостей, было бы довольно громоздким получить доступ к атрибутам листовых узлов, как вам пришлось бы реплицируйте всю иерархию с помощью структур, даже если они вам действительно не нужны. – andresp

+0

Я вижу вашу точку зрения. [Этот вопрос] (https://github.com/golang/go/issues/3633) может вас заинтересовать. – Makpoc

+0

вот оно, особенно https://github.com/golang/go/issues/3633#issuecomment-66067258. будем надеяться, что они найдут время, чтобы сделать это для следующего выпуска. благодаря – andresp

Смежные вопросы