XML文档验证错误targetNamespace参数

时间:2014-05-12 17:58:48

标签: c# xml

我有一个包含以下属性的模式:

<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文档属性(或如何编码)的信息。

2 个答案:

答案 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