none
Не работает linqtoxml запрос RRS feed

  • Вопрос

  • Здравствуйте. У меня есть вот такая 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[] и вы потом замучаетесь.

    6 ноября 2014 г. 11:16
  • Все понял, спасибо громадное :)
    6 ноября 2014 г. 11:20