(与我的问题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是否足够?
答案 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");
}
}
}