使用Schema创建XML文件

时间:2012-03-28 08:20:33

标签: xml visual-studio-2008 c#-3.0 xsd

(与我的问题XML Parsing using a schema in C#相关)

我正在为一个将使用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是否足够?

1 个答案:

答案 0 :(得分: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");


        }
    }
}