Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Exe1592
1 / 1 / 2
Регистрация: 07.02.2018
Сообщений: 85
1

Парсинг XML Delphi

04.07.2018, 14:28. Просмотров 976. Ответов 2
Метки нет (Все метки)

Доброго времени суток.
Срочно нужна помощь по парсингу XML. Информации особо немного,трудно понять.
____________
Часть XML файла из которого нам нужен размер!
XML
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
<std:node name="SectionCallout">
            <std:node name="Default">
                <std:node name="ViewScaleDependant">
                    <std:enumval name="YesNo">No</std:enumval>
                </std:node>
                <std:node name="Type">
                    <std:enumval name="CalloutTypes">Corners ans arrows</std:enumval>
                </std:node>
                <std:node name="Profile">
                    <std:node name="LineType">
                        <std:intval>1</std:intval>
                    </std:node>
                    <std:node name="Thickness">
                        <std:intval>1</std:intval>
                    </std:node>
                </std:node>
                <std:node name="Corners">
                    <std:node name="Thickness">
                        <std:intval>4</std:intval>
                    </std:node>
                    <std:node name="Length">
                        <std:floatval>5</std:floatval>
                    </std:node>
                </std:node>
                <std:node name="Attachment">
                    <std:enumval name="AttachmentToCallout">Head</std:enumval>
                </std:node>
                <std:node name="Arrows">
                    <std:node name="Length">
                        <std:floatval>10</std:floatval>
                    </std:node>
                    <std:node name="Head">
                        <std:node name="Angle">
                            <std:floatval>7.5</std:floatval>
                        </std:node>
                        <std:node name="Type">
                            <std:enumval name="CalloutArrowHeadType">Filled arrow</std:enumval>
                        </std:node>
                        <std:node name="Length">
                            <std:floatval>5</std:floatval>
                        </std:node>
                    </std:node>
                </std:node>
                <std:node name="Color">
                    <std:colorval>0 0 0</std:colorval>
                </std:node>
                <std:node name="Text">
                    <std:node name="Font">
                        <std:node name="Name">
                            <std:strval>GOSTtype A</std:strval>
                        </std:node>
                        <std:node name="Bold">
                            <std:enumval name="YesNo">No</std:enumval>
                        </std:node>
                        <std:node name="Italic">
                            <std:enumval name="YesNo">No</std:enumval>
                        </std:node>
                        <std:node name="Size">
                            <std:floatval>10</std:floatval>
                        </std:node>
                        <std:node name="Underline">
                            <std:enumval name="YesNo">No</std:enumval>
                        </std:node>
                        <std:node name="Color">
                            <std:colorval>255 0 255</std:colorval>
                        </std:node>
                        <std:node name="Ratio">
                            <std:floatval>100</std:floatval>
                        </std:node>
                        <std:node name="Slant">
                            <std:floatval>0</std:floatval>
                        </std:node>
                        <std:node name="Spacing">
                            <std:floatval>0</std:floatval>
                        </std:node>
                        <std:node name="Pitch">
                            <std:enumval name="FontPitch">Fixed</std:enumval>
                        </std:node>
                        <std:node name="Strikethrough">
                            <std:enumval name="YesNo">No</std:enumval>
                        </std:node>
                        <std:node name="Overline">
                            <std:enumval name="YesNo">No</std:enumval>
                        </std:node>
                    </std:node>
                    <std:node name="Frame">
                        <std:enumval name="Frame">None</std:enumval>
                    </std:node>
                </std:node>
            </std:node>
        </std:node>
Вот сам код, не находит узлы, что делаю неправильно? Прошу найти ошибку и пояснить чтобы в дальнейшем подобного не случалось! Главное понять...

(Рекурсивная процедура)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.ProcXmlNode(aXmlNode : IXMLNode; aL : TList);
var
  PXmlNode : TPXmlNode;
  attrVal : Variant;
  i : Integer;
begin
  if aXmlNode.NodeName = 'std:node' then begin
    attrVal := aXmlNode.Attributes['Drafting'];
    if not VarIsNull(attrVal) and (attrVal = 'Drafting') then
      for i := 0 to aXmlNode.ChildNodes.Count - 1 do
        if aXmlNode.ChildNodes.Get(i).NodeName = 'std:node' then begin
          New(PXmlNode);
          PXmlNode^ := aXmlNode.ChildNodes.Get(i);
          aL.Add(PXmlNode);
          Break;
        end;
  end else begin
    for i := 0 to aXmlNode.ChildNodes.Count - 1 do
      ProcXmlNode(aXmlNode.ChildNodes[i], aL);
  end;
end;
Сам обработчик
Delphi
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
procedure TForm1.Button4Click(Sender: TObject);
const
  Fn = 'ESKD.xml';
var
  XmlNode : IXMLNode;
  L : TList;
  i : Integer;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(Application.ExeName);
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    ShowMessage('Файл с заданным именем не существует. Действие отменено.');
    Exit;
  end;
 
  Memo1.Lines.LoadFromFile(Od.FileName);
  XMLDocument1.LoadFromFile(Od.FileName);
  XMLDocument1.Active := True;
 
  Memo2.Lines.Add('--------------------------------------------------');
  L := TList.Create;
  ProcXmlNode(XMLDocument1.DocumentElement, L);
  if L.Count > 0 then begin
    Memo2.Lines.Add('Перечень данных из найденных узлов:');
    for i := 0 to L.Count - 1 do begin
      XmlNode := TPXmlNode(L[i])^;
      Memo2.Lines.Add('NodeValue = "' + XmlNode.NodeValue + '"');
    end;
  end else
    Memo2.Lines.Add('Не найдено ни одного узла с заданными свойствами.')
  ;
  FreeAndNil(L);
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2018, 14:28
Ответы с готовыми решениями:

Загрузка и парсинг удаленного XML Delphi Android
Всем привет! Решил немного поиграться, установил Delphi Xe 10 и сделал простенький парсер XML....

Где найти мануал по парсингу XML? Как работать с XML в Delphi (в частности, TXMLDocument)?
Всех приветствую! Раньше несколько лет работал в Матлабе, но теперь приспичило писать программу...

Парсинг XML
Как спарсить вот это все ?? &lt;soap:Envelope...

Парсинг XML
Всем привет. Никак не могу побороть парсинг. Есть XML: &lt;DataSet...

Парсинг XML
Есть некоторый XML обрабатывая информацию, я могу влиять на &lt;b a=&quot;х&quot;&gt;, т.е. доступ к Node,...

2
Flip
310 / 149 / 64
Регистрация: 25.02.2018
Сообщений: 568
04.07.2018, 17:52 2
Лучший ответ Сообщение было отмечено Exe1592 как решение

Решение

1. Каждый XML документ минимально должен иметь служебный заголовок, например <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
2. Смысла нет переписывать посты, которые обсуждались ранее. Вот ссылка - Программа редактирования XML - документа Тут четко расписано даже более чем, с коментариями как разобрать XML документ.
1
Exe1592
1 / 1 / 2
Регистрация: 07.02.2018
Сообщений: 85
05.07.2018, 07:41  [ТС] 3
Ашотик2018, Спасибо!
0
05.07.2018, 07:41
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2018, 07:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Парсинг XML
Доброго времени суток ребята подскажите как достать &quot;&lt;description&gt;&quot; из &lt;rss version=&quot;2.0&quot;&gt;...

Парсинг XML Doc
Доброго времени суток. Отправляю запрос на сервер и получаю ответ в виде: &lt;users total_count=&quot;2&quot;...

Парсинг xml файла
Уважаемые коллеги! Помогите пожалуйста с парсингом xml xml выглядит так: -&lt;API...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.