Как отобразить все элементы xsd в виде списка в asp.net - PullRequest
0 голосов
/ 10 марта 2020

я сейчас работаю над чем-то, где мне нужно отобразить все вложенные элементы xsd в виде списка содержимого в asp. net мой текущий код

    XmlSchema schema = new XmlSchema();        
    schema = XmlSchema.Read(new XmlTextReader("example.xsd", null);

    XmlSchemaSet schemaSet = new XmlSchemaSet();        
    schemaSet.Add(schema);
    schemaSet.Compile();


    XmlSchema workingSchema = null;
    foreach (XmlSchema sc in schemaSet.Schemas())
    {
        workingSchema = sc;
    }


    DropDownList1.Items.Clear();


    ///cycle through elements, adding to dropdownlist

    foreach (XmlSchemaElement element in workingSchema.Elements.Values)
    {
        DropDownList1.Items.Add(element.Name);


        // Get the complex type of the element.

        XmlSchemaComplexType complexType = element.ElementSchemaType as XmlSchemaComplexType;
        if (complexType!=null)
        {
            XmlSchemaSequence seq = (XmlSchemaSequence)complexType.ContentTypeParticle;
            foreach (XmlSchemaElement element2 in seq.Items)
            {
                DropDownList1.Items.Add(element2.Name);
            }


        }


    }

это файл xsd, который я использовал

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd"
           targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd"
           elementFormDefault="qualified">
 <xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
   <xsd:element name="BillTo" type="tns:USAddress"/>
  </xsd:sequence>
  <xsd:attribute name="OrderDate" type="xsd:date"/>
 </xsd:complexType>

 <xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name"   type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city"   type="xsd:string"/>
   <xsd:element name="state"  type="xsd:string"/>
   <xsd:element name="zip"    type="xsd:integer"/>
  </xsd:sequence>
  <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
 </xsd:complexType>
</xsd:schema>

здесь он отображает только заказ на покупку, доставку, счет, но мне нужно отобразить все, включая название, улицу, город и т. Д. c. как это сделать

1 Ответ

0 голосов
/ 10 марта 2020

Не уверен, насколько это действительно поможет. Просто иметь элементы без родителей не очень полезно. Я использовал Xml Linq, чтобы получить результаты

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication161
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<string> names = doc.Descendants().Where(x => x.Name.LocalName == "element").Select(x => (string)x.Attribute("name")).ToList();



        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...