2012-03-28 3 views
1

(Относящиеся к моему вопросу XML Parsing using a schema in C#)Создание файла XML с помощью схемы

Я работаю на некоторый код для приложения, которое будет использовать XML для хранения бизнес-объектов (они предназначены, чтобы быть достаточно мал, так что я что XML может быть проще анализировать, обрабатывать и проверять, а не использовать текстовые файлы или какой-то пользовательский формат файла). Я уже написал схему и задавался вопросом, как бы я хотел добавить ссылку на эту схему в выводимых XML-файлах.

Как с вопросом, который я связал, я использую XmlDocument для записи файлов, потому что мне нужно работать в .net 3.5 - то же самое, что и вопрос, с которым я связан. Я также использую XmlDeclaration, XmlNode и XmlElement для записи отдельных частей xml-файла в объект XmlDocument.

Вот пример того, что я делаю:

if (!File.Exists(fileName)) 
{ 
    XmlDocument xmlDocumentWriter = new XmlDocument(); 
    XmlDeclaration xmlDec = xmlDocumentWriter.CreateXmlDeclaration("1.0", "utf-8", null); 
    xmlDocumentWriter.AppendChild(xmlDec); 

    XmlNode root = xmlDocumentWriter.CreateElement("root"); 
    XmlElement childNodeInfo = xmlDocumentWriter.CreateElement("parent-of-some-child"); 
    root.AppendChild(childNodeInfo); 

    childNodeInfor.AppendChild(xmlDocumentWriter.CreateElement("SomeChild")).InnerText = _somevariable.ToString(); 
    /* continue in this way until they've all been added */ 

    xmlDocumentWriter.Appendchild(root); 
    xmlDocumentWriter.Save(fileName); 

    /* close all open streams and xml objects */ 
} 

Каким будет создан файл XML так:

<?xml version="1.0" encoding="utf-8" ?> 
    <root> 
     <parent-of-some-child> 
     <somechild>value</somechild> 
     </parent-of-some-child> 
    </root> 

Но, как бы я идти о добавлении ссылки на схему в корневой узел?

Схема Я написал выглядит примерно так:

<?xml version="1.0" encoding="utf-8" ?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="urn:schema-name" 
    elementFormDefault="qualified"> 
    <xsd:element name="root"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="parent-of-some-child"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="some-child" type="xsd:string"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element name="parent-of-some-child"> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element name="root"> 

Я ищу, чтобы создать что-то вроде этого:

<?xml version="1.0" encoding="utf-8" ?> 
    <root xmlns="reference-to-schema"> 
     <parent-of-some-child> 
     <somechild>value</somechild> 
     </parent-of-some-child> 
    </root> 

Или мне даже нужна ссылка на схему в xml-файл? Использовать схему для проверки xml во время открытия и разбора достаточно?

+0

проверить этот вопрос: http://stackoverflow.com/questions/8324960/creating-xdocument-with-xsischemalocation-namespace – 2GDev

+0

Кроме того, что я использую .NET 3.5 , и [в этой статье MSDN] (http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.aspx) указано, что пространство XNamespace доступно только в .NET 4 –

+0

http: // msdn .microsoft.com/en-us/library/system.xml.linq.xnamespace (v = vs.90) .aspx XNamespace может использоваться с .NET 3.5. См. Пространство имен System.Xml.Linq. – 2GDev

ответ

1

Вот пример:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 


namespace XmlNameSpace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XNamespace xmlns = XNamespace.Get("urn:schema-name"); 
      XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); 
      XNamespace schemaLocation = XNamespace.Get("urn:schema-name schema.xsd"); 

      XDocument p = new XDocument(
       new XElement(xmlns + "root", 
        new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
        new XAttribute(xsi + "schemaLocation", schemaLocation), 
        new XElement("parent-of-some-child", 
         new XElement("somechild","value")) 
       ) 
      ); 


      p.Save("c:\\test.xml"); 


     } 
    } 
} 
Смежные вопросы