Какова может быть структура класса для этого XML-файла? [Дубликат]

Вы можете использовать замечательные рекурсивные функции из SQL Server:


Пример таблицы:

CREATE TABLE Testdata
(
    SomeID INT,
    OtherID INT,
    String VARCHAR(MAX)
)

INSERT Testdata SELECT 1,  9, '18,20,22'
INSERT Testdata SELECT 2,  8, '17,19'
INSERT Testdata SELECT 3,  7, '13,19,20'
INSERT Testdata SELECT 4,  6, ''
INSERT Testdata SELECT 9, 11, '1,2,3,4'

Запрос

;WITH tmp(SomeID, OtherID, DataItem, String) AS
(
    SELECT
        SomeID,
        OtherID,
        LEFT(String, CHARINDEX(',', String + ',') - 1),
        STUFF(String, 1, CHARINDEX(',', String + ','), '')
    FROM Testdata
    UNION all

    SELECT
        SomeID,
        OtherID,
        LEFT(String, CHARINDEX(',', String + ',') - 1),
        STUFF(String, 1, CHARINDEX(',', String + ','), '')
    FROM tmp
    WHERE
        String > ''
)

SELECT
    SomeID,
    OtherID,
    DataItem
FROM tmp
ORDER BY SomeID
-- OPTION (maxrecursion 0)
-- normally recursion is limited to 100. If you know you have very long
-- strings, uncomment the option
< hr>

Выход

 SomeID | OtherID | DataItem 
--------+---------+----------
 1      | 9       | 18       
 1      | 9       | 20       
 1      | 9       | 22       
 2      | 8       | 17       
 2      | 8       | 19       
 3      | 7       | 13       
 3      | 7       | 19       
 3      | 7       | 20       
 4      | 6       |          
 9      | 11      | 1        
 9      | 11      | 2        
 9      | 11      | 3        
 9      | 11      | 4        
210
задан hdoghmen 5 June 2015 в 10:39
поделиться

8 ответов

Да, используя xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.
295
ответ дан Darin Dimitrov 25 August 2018 в 13:13
поделиться

Вы можете использовать xsd, как предложено Дарином.

В дополнение к этому рекомендуется отредактировать файл test.xsd для создания более разумной схемы.

type="xs:string" можно изменить на type="xs:int" для целочисленных значений minOccurs="0" можно изменить на minOccurs="1", где требуется поле maxOccurs="unbounded", можно изменить на maxOccurs="1", где разрешен только один элемент

Вы могут создавать более продвинутые xsd-s, если вы хотите еще раз подтвердить свои данные, но это, по крайней мере, даст вам разумные типы данных в сгенерированном c #.

3
ответ дан Albin Sunnanbo 25 August 2018 в 13:13
поделиться

Вы должны рассмотреть svcutil ( svcutil question )

Оба xsd.exe и svcutil работают с файлом схемы XML (.xsd). Ваш XML должен соответствовать файлу схемы, который будет использоваться одним из этих двух инструментов.

Обратите внимание, что для этого существуют и другие сторонние инструменты.

6
ответ дан Community 25 August 2018 в 13:13
поделиться

Сначала я подумал, что Паштет Специальный был святым Граалем! Но потом я попробовал это, и мои волосы побледнели, как фильм Индианы Джонса.

Но теперь я использую http://xmltocsharp.azurewebsites.net/ , и теперь я как и раньше.

Вот отрезок того, что он сгенерировал:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }
30
ответ дан D. Kermott 25 August 2018 в 13:13
поделиться

Если вы работаете над проектом .NET 4.5 в VS 2012 (или новее), вы можете просто вставить свой XML-файл в качестве классов.

  1. Скопировать содержимое вашего XML-файла в буфер обмена
  2. В редакторе выберите место, где вы хотите вставить ваши классы
  3. В меню выберите EDIT > Paste Special > Paste XML As Classes
354
ответ дан hdoghmen 25 August 2018 в 13:13
поделиться

Чтобы преобразовать XML в класс C #:

  • Перейдите в Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • В строке поиска введите текст: - xml в инструмент кода класса
  • Загрузите, установите и используйте приложение

Примечание: в полноте время, это приложение может быть заменено, но, скорее всего, будет другой инструмент, который делает то же самое.

0
ответ дан J Wood 25 August 2018 в 13:13
поделиться

Используйте синтаксис ниже для создания класса схемы из файла XSD.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
0
ответ дан Kiran.Bakwad 25 August 2018 в 13:13
поделиться

Я понимаю, что это довольно старый пост, и вы, вероятно, двинулись дальше.

Но у меня была такая же проблема, как и вы, поэтому я решил написать свою собственную программу.

Проблема с маршрутом «xml -> xsd ->» для меня заключалась в том, что он просто создал кусок кода, который был совершенно недостижим, и я закончил его.

Это никоим образом не элегантно, но он выполнил эту работу для меня.

Вы можете получить ее здесь: Пожалуйста, внесите предложения, если вам это нравится.

SimpleXmlToCode

22
ответ дан Talon 25 August 2018 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: