Создание конкретного XML-документа с использованием пространств имен в C # - PullRequest
11 голосов
/ 14 января 2009

Нам дали образец документа, и мы должны иметь возможность воспроизвести структуру документа именно для поставщика. Тем не менее, я немного потерян с тем, как C # обрабатывает пространства имен. Вот образец документа:

<?xml version="1.0" encoding="UTF-8"?>
<Doc1 xmlns="http://www.sample.com/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.sample.com/file/long/path.xsd">
    <header>
        <stuff>data</stuff>
        <morestuff>data</morestuff>
    </header>
 </Doc1>

Как обычно, я загружаю пустой документ, а затем начинаю заполнять его:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<Doc1></Doc1>");
// Add nodes here with insert, etc...

Как только я начну документ, как мне получить пространство имен и схему в элемент Doc1? Если я начну с пространства имен и схемы в элементе Doc1, включив их в LoadXml (), то у всех дочерних элементов будет пространство имен - и это нет-нет. Документ отклонен.

Другими словами, я должен произвести ТОЧНО, как показано. (И я бы предпочел не просто писать текст в файл на C # и надеяться, что это допустимый XML).

Ответы [ 3 ]

24 голосов
/ 14 января 2009

Вы должны попробовать это таким образом

  XmlDocument doc = new XmlDocument();  

  XmlSchema schema = new XmlSchema();
  schema.Namespaces.Add("xmlns", "http://www.sample.com/file");

  doc.Schemas.Add(schema);

Не забудьте включить следующие пространства имен:

using System.Xml.Schema;
using System.Xml;
4 голосов
/ 12 декабря 2012

Лично я предпочитаю использовать общий XmlElement и его атрибуты для объявления пространств имен. Я знаю, что есть лучшие способы, но этот никогда не подведет.

Попробуйте что-то вроде этого:

xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
0 голосов
/ 14 января 2009

Если вы используете Visual Studio 2008 в папке Samples, вы найдете пример надстройки, которая позволяет вставлять фрагмент XML в виде кода Linq2XML.

Скотт Хансельман имеет сообщение в блоге с подробностями.

Я думаю, что это самый быстрый способ перехода от примера XML-документа к C # -коду, который его создает.

...