Создание определенного 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#, который его создает.