2012-03-28 6 views
1

(mit Bezug auf meine Frage XML Parsing using a schema in C#)Erstellen einer XML-Datei Schema mit

Ich bin für eine App auf einigen Code arbeiten, die XML für die Speicherung von Geschäftsobjekten (sie sind so konzipiert, dass sehr klein, so dass ich verwenden stellte fest, dass XML leichter zu parsen, zu verarbeiten und zu überprüfen ist als Textdateien oder ein benutzerdefiniertes Dateiformat zu verwenden. Ich habe das Schema bereits geschrieben und frage mich, wie ich in den ausgegebenen XML-Dateien einen Verweis auf dieses Schema hinzufügen würde.

Wie bei der Frage, die ich verknüpft habe, verwende ich XmlDocument, um die Dateien zu schreiben, weil ich in .net 3.5 arbeiten muss - aus den gleichen Gründen wie die Frage, die ich verknüpfte. Ich verwende auch XmlDeclaration, XmlNode und XmlElement, um die einzelnen Teile der XML-Datei in das XmlDocument-Objekt zu schreiben.

Hier ist ein Beispiel dafür, was ich tue:

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 */ 
} 

, die eine XML-Datei, wie dies erstellen:

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

Aber wie würde ich über das Hinzufügen eines Schemas Bezug auf das gehen Wurzelknoten?

Das Schema ich geschrieben habe, so wie diese aussieht:

<?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"> 

Ich suche so etwas zu schaffen: zum Schema

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

Oder brauche ich auch einen Verweis auf die XML-Datei? Würden Sie das Schema verwenden, um das XML beim Öffnen und Parsen zu überprüfen? Hier

+0

Überprüfung dieser Frage: http://stackoverflow.com/questions/8324960/creating-xdocument-with-xsischemalocation-namespace – 2GDev

+0

Außer, dass ich bin mit .NET 3.5 und [dieser MSDN-Artikel] (http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.aspx) gibt an, dass XNamespace nur in .NET 4 –

+0

http: // msdn verfügbar ist .microsoft.com/de-de/library/system.xml.linq.xnamespace (v = vs.90) .aspx XNamespace kann mit .NET 3.5 verwendet werden. Siehe System.Xml.Linq-Namespace. – 2GDev

Antwort

1

ein Beispiel:

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"); 


     } 
    } 
} 
Verwandte Themen