动态地我从MQ接收这些XML中的任何一个。 所有元素应该是相同的序列,并且都是必填字段。
x
或
var connectionString = ConfigurationManager.AppSettings["connectionString"];
var client = new MongoClient(connectionString);
var database = client.GetDatabase("ES");
var collection = database.GetCollection<BsonDocument>("MyCollection");
var persons = await collection.Find(new BsonDocument()).ToListAsync();
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<ABC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<IDEN>
<A>A</A>
<B>B</B>
<C>C</C>
</IDEN>
</ABC>
也试过
错误:
Cos-nonambig:A和A(或来自其替代组的元素) 违反&#34;独特的粒子归因&#34;。在验证期间 模式,将为这两个粒子创建歧义
我知道很多人之前遇到过同样的问题,但他们的解决方案都没有帮助我。请建议。
答案 0 :(得分:2)
问题是由于序列之间的共同元素。第二个序列仅由其中间元素不同,此时只有解析器才能识别模式定义。在完全解析序列之前,无法区分公共元素(<A/>
和<C/>
)。模式验证是逐个元素完成的。相反,解析器必须延迟验证,直到遇到第二个元素。我不相信这是解析器的工作方式。相反,我的建议是:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ABC">
<xs:complexType>
<xs:sequence>
<xs:element name="IDEN">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="A"/>
<xs:choice>
<xs:element type="xs:string" name="B"/>
<xs:element type="xs:string" name="BB"/>
</xs:choice>
<xs:element type="xs:string" name="C"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
简而言之,解析器应该以确定的方式知道来自元素本身和的元素仅,而不是后续元素使用什么模式组件用于验证。