Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / заполнить DataTable из xml / 18 сообщений из 18, страница 1 из 1
26.04.2010, 16:02
    #36598771
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
допустим, на примере таблицы из Northwind, получил я xml из таблицы Employees
автор
Select * From Northwind.dbo.Employees
for XML AUTO,TYPE

авторMicrosoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6002: Service Pack 2)

получился такой xml:
автор<Northwind.dbo.Employees EmployeeID="1" LastName="Davolio" FirstName="Nancy" Title="Sales Representative" TitleOfCourtesy="Ms." BirthDate="1948-12-08T00:00:00" HireDate="1992-05-01T00:00:00" Address="507 - 20th Ave. E.
Apt. 2A" City="Seattle" Region="WA" PostalCode="98122" Country="USA" HomePhone="(206) 555-9857" Extension="5467" Photo="dbobject/Northwind.dbo.Employees[@EmployeeID='1']/@Photo" Notes="Education includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International." ReportsTo="2" PhotoPath="http://accweb/emmployees/davolio.bmp" />
......................
далее в датасете мастером создал Дататэйбл Employees

Теперь как мне его заполнить побыстрее?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            XPathDocument document = new XPathDocument(fileName);
            XPathNavigator navigator = document.CreateNavigator();
            XPathNodeIterator nodes = navigator.Select("/Employees");
            m_Dataset.Liter.Clear();
            while (nodes.MoveNext())
            {
                XPathNavigator tmp = nodes.Current;
                DataRow row;
                row = m_Dataset.Liter.NewRow();

                row["Employees"] = Convert.ToInt32(tmp.GetAttribute("Employees", ""));
                row["LastName"] = Convert.ToString(tmp.GetAttribute("LastName", ""));
                //И т.д.

                m_Dataset.Employees.Rows.Add(row);
            }

Как-то можно избавится от этого перечисления полей?

row["Employees"] = Convert.ToInt32(tmp.GetAttribute("Employees", ""));
row["LastName"] = Convert.ToString(tmp.GetAttribute("LastName", ""));
...
Рейтинг: 0 / 0
27.04.2010, 18:55
    #36601498
pyroman69
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
а ReadXml не катит?
...
Рейтинг: 0 / 0
08.06.2010, 12:33
    #36675125
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
возвращаюсь к старому проекту.
Как указывать Read Xml'у, как именно считывать даные в xml ?
...
Рейтинг: 0 / 0
08.06.2010, 12:54
    #36675207
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Erik_Kartmann
Код: plaintext
1.
Select * From Northwind.dbo.Employees
for XML AUTO,TYPE

Это невалидный xml, ибо в документе будут существовать несколько корневых узлов.
Используйте такой код:

Код: plaintext
1.
select * from Northwind.dbo.Employees
for xml auto, elements, root('root'), type

xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
<root>
  <Northwind.dbo.Employees>
    <EmployeeID>1</EmployeeID>
    <LastName>Davolio</LastName>
    <FirstName>Nancy</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Ms.</TitleOfCourtesy>
    <BirthDate>1948-12-08T00:00:00</BirthDate>
    <HireDate>1992-05-01T00:00:00</HireDate>
    <Address>507 - 20th Ave. E.
Apt. 2A</Address>
    <City>Seattle</City>
    <Region>WA</Region>
    <PostalCode>98122</PostalCode>
    <Country>USA</Country>
    <HomePhone>(206) 555-9857</HomePhone>
    <Extension>5467</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='1']/@Photo</Photo>
    <Notes>Education includes a BA in psychology from Colorado State University in 1970.  She also completed "The Art of the Cold Call."  Nancy is a member of Toastmasters International.</Notes>
    <ReportsTo>2</ReportsTo>
    <PhotoPath>http://accweb/emmployees/davolio.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>2</EmployeeID>
    <LastName>Fuller</LastName>
    <FirstName>Andrew</FirstName>
    <Title>Vice President, Sales</Title>
    <TitleOfCourtesy>Dr.</TitleOfCourtesy>
    <BirthDate>1952-02-19T00:00:00</BirthDate>
    <HireDate>1992-08-14T00:00:00</HireDate>
    <Address>908 W. Capital Way</Address>
    <City>Tacoma</City>
    <Region>WA</Region>
    <PostalCode>98401</PostalCode>
    <Country>USA</Country>
    <HomePhone>(206) 555-9482</HomePhone>
    <Extension>3457</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='2']/@Photo</Photo>
    <Notes>Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981.  He is fluent in French and Italian and reads German.  He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993.  Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.</Notes>
    <PhotoPath>http://accweb/emmployees/fuller.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>3</EmployeeID>
    <LastName>Leverling</LastName>
    <FirstName>Janet</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Ms.</TitleOfCourtesy>
    <BirthDate>1963-08-30T00:00:00</BirthDate>
    <HireDate>1992-04-01T00:00:00</HireDate>
    <Address>722 Moss Bay Blvd.</Address>
    <City>Kirkland</City>
    <Region>WA</Region>
    <PostalCode>98033</PostalCode>
    <Country>USA</Country>
    <HomePhone>(206) 555-3412</HomePhone>
    <Extension>3355</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='3']/@Photo</Photo>
    <Notes>Janet has a BS degree in chemistry from Boston College (1984).  She has also completed a certificate program in food retailing management.  Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.</Notes>
    <ReportsTo>2</ReportsTo>
    <PhotoPath>http://accweb/emmployees/leverling.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>4</EmployeeID>
    <LastName>Peacock</LastName>
    <FirstName>Margaret</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Mrs.</TitleOfCourtesy>
    <BirthDate>1937-09-19T00:00:00</BirthDate>
    <HireDate>1993-05-03T00:00:00</HireDate>
    <Address>4110 Old Redmond Rd.</Address>
    <City>Redmond</City>
    <Region>WA</Region>
    <PostalCode>98052</PostalCode>
    <Country>USA</Country>
    <HomePhone>(206) 555-8122</HomePhone>
    <Extension>5176</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='4']/@Photo</Photo>
    <Notes>Margaret holds a BA in English literature from Concordia College (1958) and an MA from the American Institute of Culinary Arts (1966).  She was assigned to the London office temporarily from July through November 1992.</Notes>
    <ReportsTo>2</ReportsTo>
    <PhotoPath>http://accweb/emmployees/peacock.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>5</EmployeeID>
    <LastName>Buchanan</LastName>
    <FirstName>Steven</FirstName>
    <Title>Sales Manager</Title>
    <TitleOfCourtesy>Mr.</TitleOfCourtesy>
    <BirthDate>1955-03-04T00:00:00</BirthDate>
    <HireDate>1993-10-17T00:00:00</HireDate>
    <Address>14 Garrett Hill</Address>
    <City>London</City>
    <PostalCode>SW1 8JR</PostalCode>
    <Country>UK</Country>
    <HomePhone>(71) 555-4848</HomePhone>
    <Extension>3453</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='5']/@Photo</Photo>
    <Notes>Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976.  Upon joining the company as a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London.  He was promoted to sales manager in March 1993.  Mr. Buchanan has completed the courses "Successful Telemarketing" and "International Sales Management."  He is fluent in French.</Notes>
    <ReportsTo>2</ReportsTo>
    <PhotoPath>http://accweb/emmployees/buchanan.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>6</EmployeeID>
    <LastName>Suyama</LastName>
    <FirstName>Michael</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Mr.</TitleOfCourtesy>
    <BirthDate>1963-07-02T00:00:00</BirthDate>
    <HireDate>1993-10-17T00:00:00</HireDate>
    <Address>Coventry House
Miner Rd.</Address>
    <City>London</City>
    <PostalCode>EC2 7JR</PostalCode>
    <Country>UK</Country>
    <HomePhone>(71) 555-7773</HomePhone>
    <Extension>428</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='6']/@Photo</Photo>
    <Notes>Michael is a graduate of Sussex University (MA, economics, 1983) and the University of California at Los Angeles (MBA, marketing, 1986).  He has also taken the courses "Multi-Cultural Selling" and "Time Management for the Sales Professional."  He is fluent in Japanese and can read and write French, Portuguese, and Spanish.</Notes>
    <ReportsTo>5</ReportsTo>
    <PhotoPath>http://accweb/emmployees/davolio.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>7</EmployeeID>
    <LastName>King</LastName>
    <FirstName>Robert</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Mr.</TitleOfCourtesy>
    <BirthDate>1960-05-29T00:00:00</BirthDate>
    <HireDate>1994-01-02T00:00:00</HireDate>
    <Address>Edgeham Hollow
Winchester Way</Address>
    <City>London</City>
    <PostalCode>RG1 9SP</PostalCode>
    <Country>UK</Country>
    <HomePhone>(71) 555-5598</HomePhone>
    <Extension>465</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='7']/@Photo</Photo>
    <Notes>Robert King served in the Peace Corps and traveled extensively before completing his degree in English at the University of Michigan in 1992, the year he joined the company.  After completing a course entitled "Selling in Europe," he was transferred to the London office in March 1993.</Notes>
    <ReportsTo>5</ReportsTo>
    <PhotoPath>http://accweb/emmployees/davolio.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>8</EmployeeID>
    <LastName>Callahan</LastName>
    <FirstName>Laura</FirstName>
    <Title>Inside Sales Coordinator</Title>
    <TitleOfCourtesy>Ms.</TitleOfCourtesy>
    <BirthDate>1958-01-09T00:00:00</BirthDate>
    <HireDate>1994-03-05T00:00:00</HireDate>
    <Address>4726 - 11th Ave. N.E.</Address>
    <City>Seattle</City>
    <Region>WA</Region>
    <PostalCode>98105</PostalCode>
    <Country>USA</Country>
    <HomePhone>(206) 555-1189</HomePhone>
    <Extension>2344</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='8']/@Photo</Photo>
    <Notes>Laura received a BA in psychology from the University of Washington.  She has also completed a course in business French.  She reads and writes French.</Notes>
    <ReportsTo>2</ReportsTo>
    <PhotoPath>http://accweb/emmployees/davolio.bmp</PhotoPath>
  </Northwind.dbo.Employees>
  <Northwind.dbo.Employees>
    <EmployeeID>9</EmployeeID>
    <LastName>Dodsworth</LastName>
    <FirstName>Anne</FirstName>
    <Title>Sales Representative</Title>
    <TitleOfCourtesy>Ms.</TitleOfCourtesy>
    <BirthDate>1966-01-27T00:00:00</BirthDate>
    <HireDate>1994-11-15T00:00:00</HireDate>
    <Address>7 Houndstooth Rd.</Address>
    <City>London</City>
    <PostalCode>WG2 7LT</PostalCode>
    <Country>UK</Country>
    <HomePhone>(71) 555-4444</HomePhone>
    <Extension>452</Extension>
    <Photo>dbobject/Northwind.dbo.Employees[@EmployeeID='9']/@Photo</Photo>
    <Notes>Anne has a BA degree in English from St. Lawrence College.  She is fluent in French and German.</Notes>
    <ReportsTo>5</ReportsTo>
    <PhotoPath>http://accweb/emmployees/davolio.bmp</PhotoPath>
  </Northwind.dbo.Employees>
</root>
...
Рейтинг: 0 / 0
08.06.2010, 14:03
    #36675471
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
А как его можно научить произвольному xml'ю ?
...
Рейтинг: 0 / 0
08.06.2010, 14:14
    #36675513
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Erik_KartmannА как его можно научить произвольному xml'ю ?
Никак.
...
Рейтинг: 0 / 0
08.06.2010, 14:45
    #36675611
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
А аналоги есть так, как я хочу?
...
Рейтинг: 0 / 0
08.06.2010, 14:55
    #36675641
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
1. Вам кто-то запрещает писать правильный валидный xml ?
2. Не хотите придерживаться правил - парсите xml руками как обычный текст .
3. С тем, что Вы написали, ни один XPathDocument, не тоб что DataTable, не будет работать
...
Рейтинг: 0 / 0
08.06.2010, 16:04
    #36675867
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
МСУ1. Вам кто-то запрещает писать правильный валидный xml ?
2. Не хотите придерживаться правил - парсите xml руками как обычный текст .
3. С тем, что Вы написали, ни один XPathDocument, не тоб что DataTable, не будет работать
Документ того вида, где "for XML AUTO,TYPE" уже вошёл в оборот.
3. через это оно сейчас работает.
...
Рейтинг: 0 / 0
08.06.2010, 16:12
    #36675894
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Erik_KartmannДокумент того вида, где "for XML AUTO,TYPE" уже вошёл в оборот.

- Наркотрафик уже вошёл в оборот в Росиии
- Что делать: бороться и искоренять или забить?

Подумайте над этим на досуге.

Erik_Kartmannчерез это оно сейчас работает.
Что "оно"? Где работает? Как работает?

Работает - это не значит "правильно работает"

Erik_Kartmannчерез это оно сейчас работает.
Ну так и "работайте" дальше, зачем на форум тогда обратились?
...
Рейтинг: 0 / 0
08.06.2010, 16:16
    #36675902
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
интерисует "цивильная" возможность добавления в датасет.
Следовательно моя задача сводится к конвертированию ХМЛа в Б-гоугодный вид.
...
Рейтинг: 0 / 0
08.06.2010, 16:27
    #36675939
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Erik_Kartmannинтерисует "цивильная" возможность добавления в датасет.
Чтобы "цивильно" добавлять в датасет, нужно "цивильно" составлять xml.
P.S. Говорю же: в Вашем распоряжении все прелести ручного парса средствами регекспа. Наслаждайтесь.
Erik_KartmannСледовательно моя задача сводится к конвертированию ХМЛа в Б-гоугодный вид.
Ну если то, что генерит for XML AUTO,TYPE можно назвать xml'ем, то да
...
Рейтинг: 0 / 0
08.06.2010, 16:40
    #36675982
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Вот Вам самый дешевый способ, не мучайтесь :)

Код: plaintext
1.
2.
3.
4.
5.
6.
DataSet ds = new DataSet();
string xml = "<root>" + "Ваш кривой XML" + "</root>";
using (TextReader reader = new StringReader(xml))
{
    ds.ReadXml(reader);
    DataTable table = ds.Tables[0];
}
...
Рейтинг: 0 / 0
16.07.2010, 09:38
    #36744487
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
А как ReadXml'ю давать несколько таблиц, всязаных ключами?
...
Рейтинг: 0 / 0
16.07.2010, 10:03
    #36744535
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
...
Рейтинг: 0 / 0
16.07.2010, 11:25
    #36744746
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Я имею ввиду, как по правилам валидности в одноми том же хмле хранить несколько связанных таблиц, чтобы потом не было подобных сюрпризов!
...
Рейтинг: 0 / 0
16.07.2010, 13:30
    #36745050
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
Erik_Kartmann,

такое ощущение что вы не читаете ответов кот. вам дают
...
Рейтинг: 0 / 0
19.07.2010, 12:16
    #36747841
Erik_Kartmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнить DataTable из xml
авторCREATE TABLE Customers (CustomerID varchar(20) primary key,
ContactName varchar(20),
CompanyName varchar(20))
GO
CREATE TABLE Orders( CustomerID varchar(20), OrderDate datetime)
GO
DECLARE @docHandle int
DECLARE @xmlDocument nvarchar(max) -- or xml type
SET @xmlDocument = N'<ROOT>
<Customers CustomerID="XYZAA" ContactName="Joe" CompanyName="Company1">
<Orders CustomerID="XYZAA" OrderDate="2000-08-25T00:00:00"/>
<Orders CustomerID="XYZAA" OrderDate="2000-10-03T00:00:00"/>
</Customers>
<Customers CustomerID="XYZBB" ContactName="Steve"
CompanyName="Company2">No Orders yet!
</Customers>
</ROOT>'
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
SELECT *
FROM OPENXML(@docHandle, N'/ROOT/Customers')
WITH Customers

EXEC sp_xml_removedocument @docHandle[/quote]

теперь совсем непонятно, каким майкрософт считает хмл "валидным".
В ОпенХМЛе если в with'е таблицу прописываеш - по умолчанию атрибуты читает
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / заполнить DataTable из xml / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]