Я пытаюсь извлечь метаданные из документа .odt
.Unmarshal namespaced Теги XML - Golang
Файл, содержащий XML называется meta.xml
Он имеет такую структуру:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" office:version="1.2">
<office:meta>
<meta:creation-date>2016-10-18T15:05:19.137453293</meta:creation-date>
<dc:title>Document</dc:title>
<dc:date>2017-01-17T00:59:04.731054728</dc:date>
<meta:document-statistic meta:page-count="1" meta:word-count="0" meta:character-count="0"/>
</office:meta>
</office:document-meta>
Я использую xml.Unmarshal()
encoding/xml
из пакета для разбора XML и поместить значения в поле структуры.
Это структура Я использую:
type Query struct {
CreationDate string `xml:""`
PageCount int `xml:""`
WordCount int `xml:""`
CharCount int `xml:""`
}
То, что я понял из имеющейся документации, что я могу использовать полевые тег типа xml:"tag-name"
, чтобы получить значение XML тега, и xml:name,attr
получить значение атрибута.
Однако, поскольку XML-файл имеет теги с расширением имен (например, meta:creation-date
), все, что я пробовал до сих пор, оставляет поля структуры пустыми. Хотя, возможно, я ошибаюсь.
Это целая программа внутри Go детской площадки: https://play.golang.org/p/n7C50l1gsV
https://github.com/golang/go/issues/9519 - последний комментарий предполагает, что поддерживаются только префиксные атрибуты (не элементы). –
Как я могу извлечь только префиксные атрибуты? Пример: 'meta: word-count =" 0 "' или они также недоступны, потому что тег находится на расстоянии от имени? – Anurope
Вот обновленная версия вашей игровой площадки [код] (https://play.golang.org/p/YFO5jp70gN), которая может помочь. –