Лучший отвечающий
Не работает linqtoxml запрос

Вопрос
-
Здравствуйте. У меня есть вот такая xml
<?xml version="1.0" encoding="UTF-8"?> -<export xmlns:oos="http://zakupki.gov.ru/oos/types/1" xmlns="http://zakupki.gov.ru/oos/export/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-<contract schemeVersion="4.4"><oos:id>17248503</oos:id><oos:regNum>0165100000114000112</oos:regNum><oos:number>2014.286664</oos:number><oos:publishDate>2014-09-30T09:30:36Z</oos:publishDate><oos:signDate>2014-09-30</oos:signDate><oos:versionNumber>0</oos:versionNumber>-<oos:foundation>-<oos:fcsOrder><oos:notificationNumber>0165100000114000125</oos:notificationNumber><oos:lotNumber .....................
я хочу вытащить данные которые лежат на первом уровне вложенности тега contract т.е. <oos:id>, <oos:regNum> и т.д. но почему то запрос не работает
IEnumerable<Contract> contract = (from contr in doc.Descendants("contract") select new Contract { id = contr.Element(aw + "id").Value, number = contr.Element(aw + "number").Value, publishDate = contr.Element(aw + "number").Value, regNum = contr.Element(aw + "regNum").Value, signDate = contr.Element(aw + "signDate").Value, version = contr.Element(aw + "versionNumber").Value });
Скажите что я не так делаю ??
6 ноября 2014 г. 6:04
Ответы
-
блин :( какие надо тогда подскажите пожалуйста ?
Все верно, в fcs_regions лежат все архивы по регионам по 44 фз. Скачивайте крайние схемы информационного обмена, распаковывайте xsd (схема 4.6 текущая) и генерируйте классы:
xsd.exe fcsExport.xsd IntegrationTypes.xsd /classes
Дальше думаете разберетесь. Головной класс - export. У него в корне объекты разных типов. Надо получать .GetType() и в зависимости от типа объекта приводить его к нужному, дальше спокойно работаем. Это вкратце. Остальное - коммерческая тайна :)
Кстати поиск в 44ФЗ и 223ФЗ по номеру закупки 0165100000114000112 не дает результата...- Изменено Maxim Shusharin 6 ноября 2014 г. 10:55
- Помечено в качестве ответа Timur2008 6 ноября 2014 г. 11:03
6 ноября 2014 г. 10:49
Все ответы
-
запрос не работает
А что он делает? Бездельничает и пьёт пиво?
Полагаю, aw - это пространство имён http://zakupki.gov.ru/oos/types/1 ?
У элемента contract тоже есть пространство имён - по умолчанию, равное http://zakupki.gov.ru/oos/export/1. Соответственно, его нужно указать в запросе.
-----
Давайте осмысленные имена в своём коде. Я понимаю, откуда растут ноги aw - это adventure-works из примеров кода в MSDN. Но у вас то другие имена в xml.
- Изменено Petalvik 6 ноября 2014 г. 8:02
6 ноября 2014 г. 7:59 -
а да извините , он должен извлечь данные из элементов<oos:id>17248503</oos:id><oos:regNum>0165100000114000112</oos:regNum><oos:number>2014.286664</oos:number><oos:publishDate>2014-09-30T09:30:36Z</oos:publishDate><oos:signDate>2014-09-30</oos:signDate><oos:versionNumber>0</oos:versionNumber>
да вот в том то и дело что я и так пробовал делать
IEnumerable<Contract> contract = (from contr in doc.Descendants(aw+"contract") select new Contract { id = contr.Element(aw + "id").Value, number = contr.Element(aw + "number").Value, publishDate = contr.Element(aw + "number").Value, regNum = contr.Element(aw + "regNum").Value, signDate = contr.Element(aw + "signDate").Value, version = contr.Element(aw + "versionNumber").Value });
тоже самое :((
извините aw это
XNamespace aw = "http://zakupki.gov.ru/oos/types/1";
- Изменено Timur2008 6 ноября 2014 г. 9:08
6 ноября 2014 г. 9:03 -
Добрый день,
добейте генерацию классов из xsd, слишком долго будете вручную разбирать xml, здоровые они там.
И что-то я не понял, откуда вы такую xml взяли? У меня другие форматы:
///44 ФЗ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> - <ns2:export xmlns="http://zakupki.gov.ru/oos/types/1" xmlns:ns2="http://zakupki.gov.ru/oos/export/1" xmlns:ns3="http://zakupki.gov.ru/oos/printform/1"> - <ns2:contract schemeVersion="4.5"> <id>17570440</id> <regNum>0376300007114000029</regNum> <number>453163</number> <publishDate>2014-11-01T17:47:57.533+03:00</publishDate> <signDate>2014-11-01+03:00</signDate> <versionNumber>0</versionNumber> /// 223 ФЗ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> - <ns2:purchaseContract xsi:schemaLocation="http://zakupki.gov.ru/223/integration/schema/TFF-3.2 http://zakupki.gov.ru/223/integration/schema/TFF-3.2/purchase.xsd" xmlns:ns5="http://zakupki.gov.ru/223fz/complaint/1" xmlns="http://zakupki.gov.ru/223fz/types/1" xmlns:ns6="http://zakupki.gov.ru/223fz/orderClauseList/1" xmlns:ns7="http://zakupki.gov.ru/223fz/purchasePlan/1" xmlns:ns8="http://zakupki.gov.ru/223fz/webRequest/1" xmlns:ns2="http://zakupki.gov.ru/223fz/purchase/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://zakupki.gov.ru/223fz/reference/1" xmlns:ns4="http://zakupki.gov.ru/223fz/dishonestSupplier/1"> - <header> <guid>a07f5171-0f52-49aa-b478-007f6014e0f3</guid> <createDateTime>2013-04-26T17:30:24</createDateTime> </header> - <ns2:body> - <ns2:item>
6 ноября 2014 г. 10:16 -
Все, понял, пространство oos - устаревший тип извещений(94 ФЗ), с ним больше не работают по закону, вы не те xml разбираете, вот у вас и не получается десериализация xml.6 ноября 2014 г. 10:20
-
В fcs_regions на ФТП. Там такие архивы лежат с xml у них там имена: contract_0165100000114000112_17248503 .Да вот я подумал что смысла то особого нет делать по xsd схемам раз их постоянно переделывают. Ну и с десериализацией всеже пока проблемы, поэтому я каждый отдельный тег оформил так же в виде сущности и так с ними буду работать.6 ноября 2014 г. 10:41
-
блин :( какие надо тогда подскажите пожалуйста ?6 ноября 2014 г. 10:42
-
блин :( какие надо тогда подскажите пожалуйста ?
Все верно, в fcs_regions лежат все архивы по регионам по 44 фз. Скачивайте крайние схемы информационного обмена, распаковывайте xsd (схема 4.6 текущая) и генерируйте классы:
xsd.exe fcsExport.xsd IntegrationTypes.xsd /classes
Дальше думаете разберетесь. Головной класс - export. У него в корне объекты разных типов. Надо получать .GetType() и в зависимости от типа объекта приводить его к нужному, дальше спокойно работаем. Это вкратце. Остальное - коммерческая тайна :)
Кстати поиск в 44ФЗ и 223ФЗ по номеру закупки 0165100000114000112 не дает результата...- Изменено Maxim Shusharin 6 ноября 2014 г. 10:55
- Помечено в качестве ответа Timur2008 6 ноября 2014 г. 11:03
6 ноября 2014 г. 10:49 -
блин все понял , да мне этого хватит чтобы разобраться но у меня вопрос а в каком каталоге нужные xml лежат ? В contract там они все с нэймспейсом oos идут6 ноября 2014 г. 11:06
-
блин все понял , да мне этого хватит чтобы разобраться но у меня вопрос а в каком каталоге нужные xml лежат ? В contract там они все с нэймспейсом oos идут
:) Да, в корне старые лежат, с 2013 года и по настоящее время, вам нужен:
\fcs_regions\Регион\contracts\currMonth\
А вот если все нужны будут, тогда надо генерировать еще с подключением oosExport.xsd.
Но лучше их не мешать, т.к. у вас будет много элементов типа object[] и вы потом замучаетесь.
- Изменено Maxim Shusharin 6 ноября 2014 г. 11:19
6 ноября 2014 г. 11:16 -
Все понял, спасибо громадное :)6 ноября 2014 г. 11:20