![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Я что-то не понял с этим XML... [D7, WinXP]
VID © (2006-12-19 12:28:00)Есть такая XML:
<PLANEXPENSE>
<ESTIMATE ID="1000000004" CAPTION="sometext" KIF_ID="1" ESTKIND_ID="1" ESTKIND_CAPTION="Роспись"/>
<!--Child #1-->
<ORG ID="1000000276" CAPTION="sometext" DESCRIPTION="sometext" TAXCODE="5257056163" KPP="525701001" OKATO=""/>
<!--Child #2-->
<RECIPIENT ID="1000000276" CAPTION="sometext" DESCRIPTION="sometext" TAXCODE="5257056163" KPP="525701001" OKATO=""/>
<!--Child #3-->
<TERRITORY ID="1000000061" CODE="32051" OKATO="22401000000" CAPTION="г. sometext"/>
<!--Child #4-->
<OPERTYPE ID="0" CAPTION="НЕ УКАЗАНА"/>
<!--Child #5-->
<KBK KFSR_CODE="408" KCSR_CODE="3150000" KVR_CODE="365" KADMR_CODE="198" KESR_CODE="241" KDF_CODE="0" KDE_CODE="21" KDR_CODE="0" KIF_ID="1"/>
<!--Child #6-->
<AMOUNT PLANQUART1="" PLANQUART2="" PLANQUART3="" PLANQUART4="" PLANONDATE="" UPDATEQUART1="534037999" UPDATEQUART2="399968000" UPDATEQUART3="674736001" UPDATEQUART4="320332000" UPDATEONDATE="1929074000" EXEC=""/>
<!--Child #7-->
</PLANEXPENSE>
Начинаю работать с ней
var
El: IXMLDOMElement;
begin
El := Doc.documentElement; //(Doc - это и есть представленый XML)
El := El.firstChild as IXMLDOMElement;
while Assigned(El) do
begin
ShowMessage(El.xml);
El := El.nextSibling as IXMLDOMElement;
end;
end;
Задумка проста, пройтись по всем дочерним элемента главного элемента <PLANEXPENSE>. Я думал, что сначала я получу элемент <ESTIMATE>, затем <ORG>, затем <RECIPIENT> и тд. Однако я получаю такую последовательность:
<ESTIMATE>, <!--Child #1-->, <ORG>, <!--Child #2--> и тд.
Т.е. комментарии, находящиеся внутри XML тоже считаются за секции, и идут в качестве nextSibling. И это меня огорчило.
Есть ли какое-нибудь стандартное решение, что бы коменты игнорились при переборе дочерних элементов ?
Reindeer Moss Eater (2006-12-19 13:03:00) [1]как, например, отличить комент от обычного нода с аттрибутами ?
По запаху. Если по свойствам не умеешь.
Или сразу с помощью XPath получить список нужных тебе нодов
var iList : IXMLDomNodeList;
begin
//Все узлы-потомки рутового элемента, не являющиеся коментами
lList := doc.selectNodes('root/*');
Плохиш (2006-12-19 12:51:00) [2]
> VID © (19.12.06 12:36) [2]
> как, например, отличить комент от обычного нода с аттрибутами?
Это риторический вопрос? Или ищешь, кто за тебя справку почитает?
VID (2006-12-19 12:36:00) [3]как, например, отличить комент от обычного нода с аттрибутами ?
Reindeer Moss Eater (2006-12-19 12:30:00) [4]Любой нод имеет тип. Его можно анализировать.