Это потому, что вы переделываете псевдоним пространства имен opf в элемент метаданных. Просто удалите этот атрибут:
new XAttribute(XNamespace.Xmlns + "opf", opfNamespace)
из вызова конструктора <metadata>
, и он отлично работает:
<package version="2.0" unique-identifier="uuid_id"
xmlns="http://www.idpf.org/2007/opf">
<metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcterms=
"http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:language>pt-BR</dc:language>
</metadata>
</package>
Теперь вы можете утверждать, что поскольку вы переделываете псевдоним пространства имен так, чтобы он имел тот же URL, что и раньше, это не имеет значения - честно говоря, я не знаю, что спецификация говорит об этом. Но это кажется несколько разумным.
С другой стороны, я считаю, что две XML-формы должны в конечном итоге обрабатываться одинаково при их разборе, поэтому, если удобнее создать элемент metadata
со всеми соответствующими объявлениями, то он не должен вызывать какой-либо проблемы ... AFAIK:)