我有一个需要使用架构验证的xml。两者都在下面。 我定义了两个模式。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Jv-Ins-Reinsurance
xmlns="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lm="http://www.xchanging.com/USM/xml" xsi:schemaLocation="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1 Jv-Ins-Reinsurance-2008-1.xsd">
<TechAccount>
<Extension>
<lm:MyCode>Test</lm:MyCode>
</Extension>
</TechAccount>
</Jv-Ins-Reinsurance>
要测试的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:usm="http://www.xchanging.com/USM/xml" xmlns="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" targetNamespace="http://www.ACORD.org/standards/Jv-Ins-Reinsurance/2008-1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2008-1b">
<xs:import namespace="http://www.xchanging.com/USM/xml" schemaLocation="USM.xsd"/>
<xs:element name="Jv-Ins-Reinsurance" type="Jv-Ins-ReinsuranceType"/>
<xs:element name="TechAccount" type="TechAccountType"/>
<xs:complexType name="Jv-Ins-ReinsuranceType">
<xs:choice>
<xs:element ref="TechAccount"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="TechAccountType">
<xs:sequence>
<xs:element name="Extension" type="TechAccount_ExtensionType"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TechAccount_ExtensionType">
<xs:sequence>
<xs:element ref = "usm:MyCode" />
</xs:sequence>
</xs:complexType>
</xs:schema>
导入的架构是:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.xchanging.com/USM/xml" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xchanging.com/USM/xml" elementFormDefault="unqualified">
<xs:element name="MyCode" type="xs:string" />
</xs:schema>
我最终得到了错误: 未声明“http://www.xchanging.com/USM/xml:MyCode”元素。
我已尝试了多项内容,但这并没有得到解决。甚至链接上的示例:http://www.xfront.com/ZeroOneOrManyNamespaces.html也执行相同的操作。
答案 0 :(得分:1)
我发现所有XML和XSD在NotePad ++中运行良好。 我编写了c#应用程序并且无法正常工作,后来我发现C#逻辑没有添加模式“http://www.xchanging.com/USM/xml”,这就是为什么无法在另一个模式中找到该元素的原因,这个模块由内存由notepad ++等工具完成。 谢谢Fabian https://stackoverflow.com/users/2898506/fabian进行调查。
这是我缺少的东西(在添加架构的前几行中)
schemas.Add(null, XmlReader.Create(new StringReader(schema2)));
schemas.Add(null, XmlReader.Create(new StringReader(schema3)));
string message = string.Empty;
doc = new XDocument(xml);
doc.Validate(schemas, (o, e) =>
{
message = e.Message;
isValidated = false;
});
要知道我们需要在调用validate之前添加所有导入的模式,以便验证器获取所有内容的知识。我的坏:/