Я работаю в c #, пытаясь извлечь имена столбцов и их типы из XML-схемы.Вот схема, в которой я ее получаю:
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="WbDT" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="WbDT">
<xs:complexType>
<xs:sequence>
<xs:element name="TranslateNo" type="xs:int" minOccurs="0" />
<xs:element name="EngWord" type="xs:string" minOccurs="0" />
<xs:element name="LanguageCd" type="xs:string" minOccurs="0" />
<xs:element name="TranslateWord" type="xs:string" minOccurs="0" />
<xs:element name="UpdateDTS" type="xs:dateTime" minOccurs="0" />
<xs:element name="UpdateBy" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
Я хотел бы получить из этого словарь, в котором каждая запись - это "ColumnName", "ColumnType".
Я немного борюсь с синтаксисом, вот что у меня так далеко:
var xml = result.WbDT;
XmlSchemaSet schemaSet = new XmlSchemaSet();
string xmlheader = "<?xml version='1.0' encoding='utf-8'?>" + System.Environment.NewLine;
string allxml = xmlheader + xml.Any[0].ToString();
schemaSet.Add("", XmlReader.Create(new StringReader(allxml)));
schemaSet.Compile();
XmlSchema customerSchema = null;
foreach (XmlSchema schema in schemaSet.Schemas())
{
customerSchema = schema;
}
foreach (XmlSchemaElement element in customerSchema.Elements.Values)
{
Console.WriteLine("Element: {0}", element.Name);
пока все хорошо, у меня теперь есть схема с одним элементом в нем .. Теперьчто мне нужно сделать, это копаться в->->элемент и повторить это, чтобы получить имена столбцов и их типы.
Синтаксис, с которым я работаю до сих пор:
XmlSchemaComplexType complexType = element.ElementSchemaType as XmlSchemaComplexType;
XmlSchemaSequence sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
//// Iterate over each XmlSchemaElement in the Items collection.
foreach (XmlSchemaElement childElement in sequence.Items)
{
Console.WriteLine("Element: {0}", childElement.Name);
}
, но когда я пытаюсь запустить этот код, я получаюисключение null для sequence.items
Я пытаюсь следовать этой документации Microsoft: https://docs.microsoft.com/en-us/dotnet/standard/data/xml/traversing-xml-schemas
Я почти уверен, что проблема в том, что мой xml имеет более глубокую структуру, чемодин в примере,
в примере xml
<xs:element name="Customer">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" type="xs:string" />
my xml
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="WbDT" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="WbDT">
<xs:complexType>
<xs:sequence>
<xs:element name="TranslateNo" type="xs:int" minOccurs="0" />