Как перебрать / просмотреть элементы XML-файла (который содержит разные пространства имен), чтобы преобразовать его в таблицу данных в C # - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть пример для чтения набора XML-схем для XML-файла, который содержит различные пространства имен. Для этого я могу получить разные схемы для каждого пространства имен, как я объяснил ниже.

Образец файла:

<?xml version="1.0" encoding="utf-8"?>
<data xmlns:d="http://sampleschema/dataservices" xmlns:m="http://sampleschema/dataservices/metadata">
	<content>
		<m:properties>
			<d:CustomerID>ALFKI</d:CustomerID>
			<d:CompanyName>Alfreds Futterkiste</d:CompanyName>
		</m:properties>
	</content>
</data>

Пример кода для получения набора схем XML:

strFileName = @"C:\Sample\Sample.xml";
XmlReader reader = XmlReader.Create(strFileName);
XmlSchemaInference schema = new XmlSchemaInference();
XmlSchemaSet schemaSet = schema.InferSchema(reader);

Это дает три различных типа схем при использовании приведенного выше кода. Но мое требование заключается в том, что мне нужна единая схема для всего XML-файла, который содержит любое количество пространств имен. Я проверил возможности кодов в msdn и переполнение стека. Я не могу найти правильного решения для этого.

Ожидаемый вывод схемы будет таким, как показано ниже.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
       <xs:element name="data">
              <xs:complexType>
                     <xs:sequence>
                            <xs:element name="content">
                                   <xs:complexType>
                                          <xs:sequence>
                                                 <xs:element name="m:properties">
                                                        <xs:complexType>
                                                               <xs:sequence>
                                                                      <xs:element name="d:CustomerID" type="xs:string"></xs:element>
                                                                      <xs:element name="d:CompanyName" type="xs:string"></xs:element>
                                                                  </xs:sequence>
                                                           </xs:complexType>
                                                    </xs:element>
                                             </xs:sequence>
                                      </xs:complexType>
                               </xs:element>
                        </xs:sequence>
                     <xs:attribute name="xmlns:d" type="xs:string"></xs:attribute>
                     <xs:attribute name="xmlns:m" type="xs:string"></xs:attribute>
                 </xs:complexType>
          </xs:element>
   </xs:schema>

Любой может помочь в достижении этого требования.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Попробуйте что-то вроде этого:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:m="http://www.w3.org/2001/XMLSchema" xmlns:d="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="content">
          <m:complexType>
            <m:sequence>
              <m:element name="properties">
                <d:complexType>
                  <d:sequence>
                    <d:element name="CustomerID" type="xs:string"></d:element>
                    <d:element name="CompanyName" type="xs:string"></d:element>
                  </d:sequence>
                </d:complexType>
              </m:element>
            </m:sequence>
          </m:complexType>
        </xs:element>
      </xs:sequence>
      <d:attribute name="xmlns_d" type="d:string"></d:attribute>
      <m:attribute name="xmlns_m" type="d:string"></m:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>
...