2015-01-21 3 views
2

Я использую golang для динамического изменения узла xml? некоторые структуры является как:Как динамически изменять узел xml?

type Row struct { 
XMLName xml.Name `xml:"row"` 
R string `xml:"r,attr,omitempty"` 
} 

после xml.Marshal(), то выход может быть "<row r="123"></row>" , но я хочу, чтобы изменить "<row></row>" к "<myrow></myrow>", если какое-то условие истинно.

Как динамически изменять узел xml с помощью golang?

ответ

3

Вот рабочий пример: Playground

xml.Name имеет поле Local, который содержит имя тега.

Если вы установили значение Local в "myrow", он выведет структуру как <myrow r="..."></myrow>.

Кроме того, вы должны удалить тег xml из поля XMLName. Когда xml-пакеты видят этот тег (xml:"row"), он автоматически назовет тег "row", вне зависимости от того, что содержит XMLName.

1

Если вы удалите аннотацию в поле XMLName структуры, вы можете изменить ее значение, чтобы настроить способ структурирования структуры. Например:

r.XMLName = xml.Name{"", "myrow"} 

бы установить имя элемента в myrow с пустым пространством имен. Аннотацию нужно удалить, поскольку она будет иметь приоритет над значением XMLName.

Вы можете увидеть результаты этого здесь: http://play.golang.org/p/3hGbE5WO8D

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