Как получить несколько пространств имен в XML C #? - PullRequest
0 голосов
/ 04 марта 2019

Ниже приведен формат XML:

<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0" unique-identifier="isbn0000000000000" xmlns="http://www.idpf.org/2007/opf">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Eltern Family</dc:title>
<dc:creator></dc:creator>
<dc:publisher></dc:publisher>
<dc:rights></dc:rights>
<dc:identifier id="isbn0000000000000">0000000000000</dc:identifier>
<dc:language>de</dc:language>
<dc:date opf:event="publication">2019-02-11</dc:date>
</metadata>
</package>

Здесь я получил пространство имен по умолчанию XDocument.Root.GetDefaultNamespace();.Но, как видите, в XML-узле <metadata> есть несколько пространств имен.Проблема в том, что они являются переменными, т. Е. Каждый XML может иметь разные значения, поэтому я не могу объявить переменную с одним фиксированным значением.

Как получить пространства имен, чтобы я мог добавить значения к потомкуэлементы?

Пожалуйста, помогите.

С уважением, Аман

1 Ответ

0 голосов
/ 04 марта 2019

Если, как вы говорите, вы хотите установить содержимое dc:rights, то вам нужно заполучить этот элемент.

Вы можете сделать это по имени - «квалифицированное имя» состоит из пространства имен и локального имени.Префикс пространства имен dc на самом деле сам по себе не важен, он просто используется как сокращение для ссылки на пространство имен в документе.

Предполагается, что вы проанализировали этот XML в XDocument с именем doc:

XNamespace dc = "http://purl.org/dc/elements/1.1/"

var rights = doc.Descendants(dc + "rights").Single();

rights.Value = "text";
...