我有一个包含以下属性的模式:
<xs:schema id="FooFile"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Foostandards.com"
elementFormDefault="qualified"
xmlns="http://Foostandards.com">
我有一个XDocument构造函数,在根标记(FooFile)上具有以下属性。
XDocument Foo2Xml = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XComment("Foo2 file specifications implemented in xml"),
new XElement("FooFile",
new XAttribute(XNamespace.Xmlns + "xsi", "http://Foostandards.com"),
new XAttribute(xsi + "schemaLocation", "http://Foostandards.com FooFile.xsd"), etc
运行XDocument Validate方法时,我收到以下错误:
&#34; targetNamespace参数&#39;&#39;应该是与...相同的值 targetNamespace&#39; http://Foostandards.com&#39;架构。&#34;
我在Schema中有targetNamespace参数,但我找不到告诉我它甚至属于XML文档属性(或如何编码)的信息。
答案 0 :(得分:13)
我明白了。该错误与架构或XDocument参数无关。它是SchemaSet对象的Add方法,它具有targetNamespace参数的空值。
我的代码:
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsd)));
其中xsd是我的架构的字符串表示。注意“”作为Add方法的第一个参数。
代码应该是:
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("http://Foostandards.com", XmlReader.Create(new StringReader(xsd)));
答案 1 :(得分:0)
添加XmlSchemaSet时,我们必须从XSD文件中放入“targetNamespace”。以下是以下代码行。
XSD文件:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="XXX" elementFormDefault="qualified"
targetNamespace="XXX" xmlns:xs="http://www.w3.org/2001/XMLSchema">
C#代码:
var schema = new XmlSchemaSet();
schema.Add("XXX", "XSD file path");
XXX :XSD文件中的targetNamespace