Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / работа с файлами xml / 14 сообщений из 14, страница 1 из 1
28.04.2014, 09:13
    #38627358
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами 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.
-<ParamMatrix>
<PCell parameterName="P0000001" df="1" beta="-16.265042538378" targetCategory="1"/>
<PCell parameterName="P0000002" df="1" beta="-0.0296017502003447" targetCategory="1"/>
<PCell parameterName="P0000003" df="1" beta="-0.0512513238133668" targetCategory="1"/>
<PCell parameterName="P0000004" df="1" beta="0.0433750216435762" targetCategory="1"/>
<PCell parameterName="P0000005" df="1" beta="0.107273712822033" targetCategory="1"/>
<PCell parameterName="P0000006" df="1" beta="-1.54871691776293" targetCategory="1"/>
<PCell parameterName="P0000007" df="1" beta="-4.20510832116267" targetCategory="1"/>
<PCell parameterName="P0000008" df="1" beta="-4.13004809556695" targetCategory="1"/>
<PCell parameterName="P0000009" df="1" beta="0.00632472367482767" targetCategory="1"/>
<PCell parameterName="P0000010" df="1" beta="11.7089646291283" targetCategory="1"/>
<PCell parameterName="P0000011" df="1" beta="14.4793862275839" targetCategory="1"/>
<PCell parameterName="P0000012" df="1" beta="13.0082564840085" targetCategory="1"/>
<PCell parameterName="P0000013" df="1" beta="14.6235447900282" targetCategory="1"/>
<PCell parameterName="P0000014" df="1" beta="-2.39641954960467" targetCategory="1"/>
<PCell parameterName="P0000015" df="1" beta="-14.1547565951222" targetCategory="1"/>
<PCell parameterName="P0000016" df="1" beta="3.85508385814786" targetCategory="1"/>
<PCell parameterName="P0000017" df="1" beta="-0.361305410611821" targetCategory="1"/>
<PCell parameterName="P0000018" df="1" beta="-5.93324602559885E-005" targetCategory="1"/>
<PCell parameterName="P0000019" df="1" beta="4.05250824274371E-005" targetCategory="1"/>
<PCell parameterName="P0000020" df="1" beta="-0.0144582157633865" targetCategory="1"/>
<PCell parameterName="P0000021" df="1" beta="0.888019931765327" targetCategory="1"/>
<PCell parameterName="P0000022" df="1" beta="-0.496509391954658" targetCategory="1"/>
<PCell parameterName="P0000023" df="1" beta="1.23439655202224" targetCategory="1"/>
<PCell parameterName="P0000024" df="1" beta="2.47476640971471" targetCategory="1"/>
<PCell parameterName="P0000025" df="1" beta="0.207897447604417" targetCategory="1"/>
</ParamMatrix>



Я не очень понимаю, что такое xml документ. Не могли бы Вы пояснить мне для общего развития, как с ним правильно работать.

Всем спасибо за ответы!
...
Рейтинг: 0 / 0
28.04.2014, 09:14
    #38627361
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
сразу поясню, что я вполне способен написать обходчик файлов и повыдергивать эти циферки в excel. просто хочется понять, что это вообще такое.
...
Рейтинг: 0 / 0
28.04.2014, 09:24
    #38627367
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Привет.
PlanBЯ не очень понимаю, что такое xml документ.Но что такое иерархическая стрктура ты же вполне понимаешь? xml документ - это просто дерево узлов, представленное в определенном формате. Для его обработки (на уровне узлов, а не на уровне текста документа) существует масса инструментов, в том числе и встроенные в винду. Набери xml в поиске даже тут - в подфоруме Visual Basic - получишь массу примеров.
...
Рейтинг: 0 / 0
28.04.2014, 09:39
    #38627387
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Shocker.Pro, привет) а низя обратиться сразу к таблице? я-то собираюсь парсить код. не думаю, что это оптимальное решение
...
Рейтинг: 0 / 0
28.04.2014, 09:59
    #38627405
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Можно работать с этим файлом как с обычным текстовым файлом - считать в переменную, найти "<ParamMatrix >" (с пробелом!) и "</ParamMatrix>", потом Split по beta=", Val.
...
Рейтинг: 0 / 0
28.04.2014, 12:20
    #38627618
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Вот функция, которая получает путь к файлу и возвращает числовой массив. Не думаю, что с XMLDOM получится проще.
Код: vbnet
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.
Function ParamMatrix(filePath, arr() As Double) As Boolean
Dim s$(), t$, i&, f%
On Error GoTo ex
f = FreeFile
Open filePath For Input Access Read As f
t = Input(LOF(f), f)
Close f
i = InStr(t, "<ParamMatrix >")
If i Then
  s = Split(Mid$(t, i + 15), "beta=""")
  ReDim arr(1 To UBound(s))
  For i = 1 To UBound(s)
    arr(i) = Val(s(i))
  Next
  ParamMatrix = True
End If
ex:
End Function

Sub test()
Dim a() As Double
If ParamMatrix("C:\temp\ssd_1.xml", a) Then
  Range("A1").Resize(UBound(a)).Value = Application.Transpose(a)
Else: MsgBox "не получилось"
End If
End Sub
...
Рейтинг: 0 / 0
28.04.2014, 15:19
    #38627841
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Где-то так. В Tools\References поставить галочку на Microsoft XML

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Option Explicit
Dim fileToOpen As Variant, XMLDoc As New DOMDocument, xmlE As IXMLDOMElement, XMLNode As IXMLDOMNode

Sub Start()
  Application.Visible = True: Application.ScreenUpdating = True
  fileToOpen = Application.GetOpenFilename("Files XML (*.xml), *.xml", , "Выберите ваш файл")
  If VarType(fileToOpen) = vbBoolean Then End
  XMLDoc.Load fileToOpen
  Set XMLNode = XMLDoc.documentElement
  If XMLNode Is Nothing Then
    MsgBox ("Похоже файл не XML. Попробуйте закрыть и вновь запустить Excel")
    End
  End If
  For Each xmlE In XMLDoc.getElementsByTagName("ParamMatrix/PCell")
    MsgBox xmlE.getAttribute("parameterName")
    MsgBox xmlE.getAttribute("beta")
  Next xmlE
End Sub 'Start
...
Рейтинг: 0 / 0
29.04.2014, 11:36
    #38628600
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
ребят, спасибо большое!
...
Рейтинг: 0 / 0
15.10.2014, 12:14
    #38777136
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
Добрый день!

Возникла похожая задача - вытащить данные из xml-файла. Не могу разобраться со структурой. Интересуют данные по CustomerInfo. Пример структуры под спойлером.
Код: 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.
-<ED374 EDNo="1001967" EDDate="2014-01-08" EDAuthor="4583001999" DictionMode="2" xmlns="urn:cbr-ru:ed:v2.0">
<dsig:SigValue xmlns:dsig="urn:cbr-ru:dsig:v1.1">bzAwMDAwMJOQXAofU5tvZ1BBBv4QlYv4HuM+NF1NWcJTCcmluI9tVfjEkokuHJ9vFn4gmWpcG/9z0GqvA6YCL/g5hdFii4gwMjQ3UzlRQUlLMDET2MxSnZaPTUVNAWmBEAA=</dsig:SigValue>
-<TUInfo TUCode="01" Participation="2">
<Name>АЛТАЙСКИЙ КРАЙ </Name>
-<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040147000" MemberType="1" ExecPayeePayts="2" BIC="040147781">
<Name>ОАО "НАРОДНЫЙ ЗЕМЕЛЬНО-ПРОМЫШЛЕННЫЙ БАНК" </Name>
</CustomerInfo>
+<CustomerInfo RegistrationMode="1" RegistrationDate="2007-12-24" OURBIC="040173001" MemberType="3" DispatchPayeePayts="1">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2009-01-13" OURBIC="040173001" OCBIC="040173001" MemberType="1" UIS="0173001001">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2008-10-22" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173604">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2013-11-21" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173703">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173707">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2011-04-26" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173713">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173720">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2011-08-10" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173725">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173733">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173735">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173739">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-01-14" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173743">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173745">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173749">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-02-04" OURBIC="040173001" OCBIC="040173001" MemberType="2" ExecPayeePayts="1" BIC="040173753" DispatchPayeePayts="2" ParentBIC="044525823">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-03-04" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173754">MemberType="1" ExecPayeePayts="1" BIC="040173766">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" 
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173757">
+<CustomerInfo StoppageMode="1" RegistrationMode="1" RegistrationDate="2010-08-27" OURBIC="040173001" OCBIC="040173001" MemberType="1" ExecPayeePayts="1" BIC="040173771">
</TUInfo>
</ED374>


Данные в таблице вот в таком примерно виде хочется выгружать в excel
EDDateTUCodeParticipationStoppageModeRegistrationModeRegistrationDateOURBICOCBICMemberTypeExecPayeePaytsBICName08.01.2014121127.08.201040173001401470001240147781НАРОДНЫЙ ЗЕМЕЛЬНО-ПРОМЫШЛЕННЫЙ БАНК08.01.2014121113.01.2009401730014017300112……

Написал код, но не хочет работать. Где я не так делаю?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub CommandButton1_Click()
Dim fileToOpen As Variant
Dim XMLDoc As New DOMDocument
Dim xmlE As IXMLDOMElement
Dim XMLNode As IXMLDOMNode
Dim o As Object

fileToOpen = Application.GetOpenFilename
XMLDoc.Load fileToOpen

For Each xmlE In XMLDoc.DocumentElement("ED374/TUInfo/CustomerInfo")
    Debug.Print xmlE.getAttribute("name")
Next
End Sub


Заранее спасибо!
...
Рейтинг: 0 / 0
15.10.2014, 12:16
    #38777138
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
в дополнение, интересуют только поля с указанными BIC (их нет в ряде случаев). Как организовать проверку наличия такой записи? мусора нам не надо
...
Рейтинг: 0 / 0
15.10.2014, 13:24
    #38777269
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
такой цикл кажется даст что нужно
Код: vbnet
1.
2.
3.
4.
5.
For Each xmlE In XMLDoc.getElementsByTagName("CustomerInfo")
  On Error Resume Next
  Debug.Print xmlE.getAttribute("BIC")
  Debug.Print xmlE.selectSingleNode("Name").Text
Next
...
Рейтинг: 0 / 0
15.10.2014, 13:34
    #38777299
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
sergeyvgтакой цикл кажется даст что нужно[/src]
спасибо большое! сори, чет я не догадался =)))))
...
Рейтинг: 0 / 0
15.10.2014, 13:48
    #38777324
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
sergeyvg, а как быть с EDDate? ее бы хотелось дуюлировать каждый раз в первом столбце (таких доков тьма)
...
Рейтинг: 0 / 0
15.10.2014, 16:14
    #38777599
sergeyvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с файлами xml
где-то так. я то не особо силен в xml, может можно и короче
Код: vbnet
1.
2.
3.
Set XMLNode = XMLDoc.documentElement
Set xmlE = XMLNode.selectSingleNode("/ED374")
Debug.Print xmlE.getAttribute("EDDate")
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / работа с файлами xml / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]