Как получить значения Xelement строки в формате xml

Автор Тема: Как получить значения Xelement строки в формате xml  (Прочитано 2947 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zr74Автор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Добрый день! Есть массив, который при выборе примитивов, у которых есть расширенные данные, получает эти расширенные данные в виде xml формата (xml указана для одного примитива):
Код - XML [Выбрать]
  1. (1,<Trench>
  2.   <Name>Т-3</Name>
  3.   <ObjectType>trench</ObjectType>
  4.   <Number>ТК-1</Number>
  5.   <Length_redef>0</Length_redef>
  6.   <UseRedefLength>false</UseRedefLength>
  7.   <Width>0.4</Width>
  8.   <Depth>0.9</Depth>
  9.   <SandLlayer>0.3</SandLlayer>
  10.   <TiltAngle>0</TiltAngle>
  11.   <IsStandard>true</IsStandard>
  12.   <Parts />
  13.   <Parts_1m>
  14.     <Part name="Кирпич красный полнотелый, ГОСТ 530–2012" quantity="8.34" sendInSpecification="True" comment="" />
  15.     <Part name="ААБл 3х240-10" quantity="2" sendInSpecification="True" comment="" />
  16.   </Parts_1m>
  17. </Trench>)
Далее надо написать, код, который позволит получать значения тегов, например: <Name>Т-3</Name> считываем в переменную string "Т-3", <Number>ТК-1</Number>  считываем в переменную string "ТК-1" и так далее.
Что нужно дальше написать, чтобы выполнить задуманное. Подскажите пожалуйста. Перепробывал кучу вариантов через свойства Xelement, выводит только надпись "Trench" в командной строке Autocad, либо фатальная ошибка.
Вот код:
Код - C# [Выбрать]
  1.  if (surId != ObjectId.Null)
  2.                     {
  3.                         DBDictionary dbExt = (DBDictionary)tr.GetObject(surId, OpenMode.ForRead);
  4.  
  5.                         foreach (DBDictionaryEntry ent in dbExt)
  6.                         {
  7.                             ObjectId dId = dbExt.GetAt("ESMT_LEP_v1.0");
  8.                             Xrecord xr = (Xrecord)tr.GetObject(dId, OpenMode.ForRead);
  9.                             TypedValue[] arr = xr.Data.AsArray();
  10.                             for (int i = 0; i < arr.Length; i++)
  11.                             {
  12.                                
  13.                                 XElement xml_att = XElement.Parse((string)arr[i].Value);
  14.                                 //string name = xml_att.Name;
  15.                                 //ed.WriteMessage("\n тег"+ name);
  16.                                 ...
  17.                                 ...
  18.                                 ...
  19.                                
  20.                             }                            
  21.                         }
  22.                     }
  23.  
« Последнее редактирование: 15-08-2022, 15:59:23 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
1) Официальная максимальная длина кода группы 1 равна 255, поэтому строку XML нужно разбить на строки длиной до 255 в XRecord.
2) Читаешь все группы 1 из xrecord и объединяешь их в одну длинную строку, а уже потом парсишь эту строку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение