SOAP-ответ на DataTable в C # - PullRequest
       32

SOAP-ответ на DataTable в C #

1 голос
/ 26 августа 2011

Я искал и пытался во многих формах передать XML-ответ в простой DataTable точно так же, как это делает Excel.

XML похож на:

<?xml version="1.0" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAPSDK4:Function xmlns:SOAPSDK4="http://www.externalwebservice.com/message/">
            <Lists>
                <ListCode>12345</ListCode>
                <ListGroups>
                    <ListGroup>
                        <CodeGroup>ASDF</CodeGroup>
                        <DescriptionGroup>Example</DescriptionGroup>
                    </ListGroup>
                </ListGroups>
                <List>
                    <CodeList>ABC</CodeList>
                    <DescriptionList>Example List</DescriptionList>
                    <ListCategories>
                        <ListCategory>Type1</ListCategory>
                        <ListCategory>Type2</ListCategory>
                    </ListCategories>
                    <ListKinds>
                        <Kind>
                            <KindType>A</KindType>
                            <KindTarget>1</KindTarget>
                            <KindAttributes>
                                <KindAttribute1>A</KindAttribute1>
                                <KindAttribute2>B</KindAttribute2>
                            </KindAttributes>
                        </Kind>
                    </ListKinds>
                </List>
            </Lists>
        </SOAPSDK4:Function>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

То, что делает Excel, может помочь мне в том, что мне нужно, то есть заполнить 4 таблицы этими данными и их связями.

Я пытался использовать DataSet.ReadXML, но проблема с ним в том, что по какой-то причине этот метод генерирует 14 таблиц с бесполезными данными, потому что нет никакой связи вообще. Позже я попытался использовать DataTable.ReadXML, но у меня возникла проблема: «DataTable не поддерживает вывод схемы из Xml». затем попытался использовать DataTable.ReadXmlSchema (XML), и он выдал ошибку без корневого документа, затем я создал XSD с командной строкой, и два сгенерированных дали ошибку, наконец, я использовал Visual Studio для генерации XSD, он сгенерировал 4 XSD без ошибок, но без созданных столбцов и без добавления данных. Ни одного из них.

У меня сейчас нет идей. Какие-либо предложения? Может быть, не DataTable без нормализованных данных (что делает Excel), а другой подход, напрямую связанный с XML?

Спасибо.

1 Ответ

1 голос
/ 26 августа 2011

Мое предложение было бы использовать технику Linq.XML в C # 3. LINQ to XML предоставляет интерфейс программирования XML в памяти, который использует платформу .NET Language-Integrated Query (LINQ). LINQ to XML использует новейшие возможности языка .NET Framework и сопоставим с обновленным, переработанным интерфейсом программирования XML Document Object Model (DOM).

Есть несколько интересных быстрых соответствующих примеров, доступных на http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

...