Я хотел бы спросить, есть ли способ получить имена тегов, связанные с данным «именем сложного типа» (из сложного объекта внутри XSD (определение схемы XML)) в C # (.NET Framework 4.5).
Результат, который я хотел бы получить: если я ищу WhateverTypeName1
, должно быть возвращено значение "childoftypeone"
.
Допустим, у нас есть следующий фрагмент XSD:
<xs:complexType name="ParentType">
<xs:choice>
<xs:element name="childoftypeone" type="WhateverTypeName1"/>
<xs:element name="childoftypetwo" type="OtherTypeName"/>
</xs:choice>
</xs:complexType>
<!-- after some declarations -->
<xs:complexType name="WhateverTypeName1">
<xs:sequence>
<!-- other elements from sequence -->
</xs:sequence>
</xs:complexType>
Из типа XmlSchema
я могу получить XmlSchemaComplexObject
, выполнив поиск WhateverTypeName1
следующим образом:
var schema = new XmlSchema(); // load the XSD here.
var arr = new string[] { "WhateverTypeName1" };
var type = schema.Items
.OfType<XmlSchemaObject>()
// we can search matching the type here, put this way just to be concise
.Where(w => w.GetType().Name.ToLower().Contains("complex"))
.Select(s => (XmlSchemaComplexType)s)
.FirstOrDefault(w => arr.Contains(w.Name));
Дело в том, что из этого XmlSchemaComplexType
объекта мне не удалось сопоставить его с объявлением тега "childoftypeone"
в ParentType
(<xs:element name="childoftypeone" type="WhateverTypeName1"/>
).
Мне удалось получить это сопряжение, только если я ищу его родительский объект (ParentType
) и просматриваю его свойство Particle
. Тем не менее, я думаю, что невозможно определить, где этот тип используется (например, ParentType
) из его собственного XmlSchemaComplexType
Как я мог это сделать?