|
|
#1
|
|||
|
|||
Работа с xml
Здравствуйте!
Подскажите пожалуйста как можно сделать мини программку на Delphi 7 чтобы она работала с xml файлами, а именно есть в xml поле ENP 8 b 16 cbvdjkjd временный полис с помощью програмки хотелось бы чтобы он исключал их из файла и сохранял уже в новом xml без этих ENP 8 имволов которые именно. Заранее спасибо!!! |
#2
|
|||
|
|||
Нифига не понятно, что конкретно надо. Приведи просо пример xml'ей до и после (можно не полностью, только от начала и до интересующего места). А вообще, в Delphi есть компонент TXMLDocument для работы с xml. Еще можно попользовать напрямую MSXML. Ну или еще посмотреть какие библиотеки есть.
|
#3
|
|||
|
|||
xml
изначально xml вот такая
<ZAP> <MO_CODE>830015</MO_CODE> <UID>3C9CDD37AE3BDBD4452581E7003DB270</UID> <ENP>8390289777000233</ENP> <NPOLIS>8390289777000233</NPOLIS> <FAM>АБДЕЛЬКХАЛЕК</FAM> <IM>МАРЬЯНА</IM> <OT>МОХАМЕДОВНА</OT> <SEX>Ж</SEX> <DR>2017-09-22</DR> <OKATO>71153906001</OKATO> <ADRES>Ямало-Ненецкий АО, Красноселькупский р-н, с Красноселькуп, ул Авиаторов, д. 6, кв. 2</ADRES> <BP>2020-04-14</BP> <DOC_TYPE>3</DOC_TYPE> <DOC_SER>I-ПК</DOC_SER> <DOC_NUM>744954</DOC_NUM> <JTYPE>2</JTYPE> <REASON>1</REASON> <VR> <TYPE>1</TYPE> <MO_CODE>830015</MO_CODE> <UCH>1</UCH> <PRVS>49</PRVS> <SNILS>13146730535</SNILS> <FAM>Убушиева</FAM> <IM>Кермен</IM> <OT>Улюмджиевна</OT> </VR> <STATUS>1</STATUS> <SNILS>20022431572</SNILS> </ZAP> есть поле <ENP> если он 16 символов то оставляем блок, если меньше 16 то удаляем блок полностью |
#4
|
|||
|
|||
Это весь xml?
Или это пример одного блока. Просто, если это весь xml, то можно обойтись малой кровью - найти <ENP>...</ENP>, посмотреть что там между ними и, если надо, то грохнуть. Если это пример блока, то сложнее. Все-таки придется строить ДОМ. Если надо грохать только сам <ENP>...</ENP>, то можно как-то так: Код:
var sl : TStringList; s : String; iStart, iEnd : Integer; begin sl := TStringList.Create; sl.LoadFromFile('file.xml'); // ну откуда мы там получаем файлик s := sl.Text; // забрали в одну строку iStart := Pos('<ENP>',s); iEnd := Pos('</ENP>',s); If (iStart > 0) And (iEnd > 0) Then If (iEnd-iStart+Length('<ENP>') <> 16) Then s := Delete(s,iStart,iEnd-iStart+Length('</ENP>'); Если таких блоков много, то надо будет пользовать функцию PosEx, там можно указать с какого по счету символа надо искать. |
#5
|
|||
|
|||
пример
пример блока только одного и если в xml epn меньше 16 символов, то удалить блок
|
#6
|
|||
|
|||
Ну тогда код я тебе дал...
|