Создание этого XML в C # - PullRequest
1 голос
/ 24 марта 2011

Раньше я использовал XmlDocument для генерации базового XML, но я изо всех сил пытаюсь воссоздать следующий XML с помощью кода. Основная проблема заключается в добавлении пространств имен в раздел описания.

Как мне создать следующий пример XML-файла?

<?xml version="1.0"?>
<pndsdc:description
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:dcterms="http://purl.org/dc/terms/"
         xmlns:pndsterms="http://purl.org/mla/pnds/terms/"
         xmlns:pndsdc="http://purl.org/mla/pnds/pndsdc/"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://purl.org/mla/pnds/pndsdc/
                             http://www.ukoln.ac.uk/metadata/pns/pndsdcxml/2005-06-13/xmls/pndsdc.xsd"
>
    <dc:identifier encSchemeURI="http://purl.org/dc/terms/URI">http://example.org/my/docs/12345/</dc:identifier>
    <dc:title xml:lang="en">Everything you wanted to know about identity, but were afraid to ask</dc:title>
    <dc:description xml:lang="en">The article provides a summary of the 2003 White Paper on identity cards for the UK
    with a critique from the perspective of several national and international civil liberties organisations.</dc:description>
    <dc:subject>Identity cards</dc:subject>
    <dc:subject>Civil liberties</dc:subject>

    <dc:subject>Human rights</dc:subject>
    <dc:type encSchemeURI="http://purl.org/dc/terms/DCMIType" valueURI="http://purl.org/dc/dcmitype/Text">Text</dc:type>
    <dcterms:license valueURI="http://creativecommons.org/licenses/by-nc-nd/2.0/uk/" />
    <dcterms:rightsHolder>The National Campaign Against Identity Cards</dcterms:rightsHolder>
    <dcterms:spatial encSchemeURI="http://purl.org/dc/terms/TGN">World, Europe, United Kingdom</dcterms:spatial>
</pndsdc:description>

Код также может быть найден здесь онлайн .

Ответы [ 3 ]

3 голосов
/ 24 марта 2011

Вы пытались использовать XMLWriter?

Я думаю, что это та часть, которую вы ищете:

XmlTextWriter поддерживает пространство имен стек, соответствующий всем пространства имен, определенные в текущем стек элементов. Используя XmlTextWriter вы может объявлять пространства имен вручную.

w.WriteStartElement("root");
 w.WriteAttributeString("xmlns", "x", null, "urn:1");
  w.WriteStartElement("item","urn:1");
  w.WriteEndElement();
  w.WriteStartElement("item","urn:1");
  w.WriteEndElement();
 w.WriteEndElement();

Приведенный выше код C # создает следующий вывод. XmlTextWriter продвигает декларацию пространства имен корневой элемент, чтобы избежать его дублируется на двух дочерних элементах. Дочерние элементы выбирают префикс из декларации пространства имен.

<root xmlns:x="urn:1">   
<x:item/>  
<x:item/>  
</x:root>
1 голос
/ 24 марта 2011

Не беспокойтесь о создании объявлений пространства имен. Просто убедитесь, что каждый элемент, который вы создаете, находится в правильном пространстве имен. XmlDocument создаст для вас объявления пространства имен. Итак:

string pdnsdcUri = "http://purl.org/mla/pnds/pndsdc/";
string dcUri = "http://purl.org/dc/elements/1.1/"
...
XmlDocument d = new XmlDocument();
XmlElement description = d.CreateElement("pdnsdc", "description", pdnsdcUri);
d.AddChild(description);
XmlElement identifier = d.CreateElement("dc", "identifier", dcUri);
description.AddChild(identifier);

и так далее. Обычно проще создать Dictionary<string, string>, содержащий пространства имен с ключом префикса, а затем сделать что-то вроде:

XmlElement foo = d.CreateElement("prefix", "name", namespaces[prefix]);
1 голос
/ 24 марта 2011

Вам нужно использовать XmlNamespaceManager:

XmlDocument document = new XmlDocument();
XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(document.NameTable);
xmlNamespaceManager.AddNamespace("dc","http://purl.org/dc/elements/1.1/");
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...