Создание определенного XML-документа с использованием пространств имен в C#

нам дали образец документа, и нам нужно иметь возможность воспроизвести структуру документа точно для поставщика. Однако я немного запутался в том, как 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 ответов


вы должны попробовать это

  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;

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

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

xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");

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

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

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