|
|
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня есть файл XML вот в таком виде: <main> - <id382> <russian>Счет отнесения затрат по начисленной заработной плате</russian> <english>////////////////////////////////</english> <azeri>Щесабланмыш ямяк щаггы цзря хярълярин аид едилмяси щесабы</azeri> </id382> - <id469> <russian>б) пособие в связи с трудовым увечьем и профессиональным заболеванием</russian> <english>b) return of benefits for work-related injuries and professional diseases</english> <azeri>б) ямяк задяси вя пешя хястялийи цзря мцавинятлярин гайтарылмасы</azeri> </id469> </main> Есть также функция, которая ищет в ней значений. MyXMLDoc->DocumentElement->ChildNodes->FindNode(Id)->ChildNodes->Nodes[lan-1]->NodeValue Но насколько я знаю, данный файл не очень красив и не отвечает возможностям XML Хочу переделать его в форму: <main> - <L id="382"> <russian>Счет отнесения затрат по начисленной заработной плате</russian> <english>////////////////////////////////</english> <azeri>Щесабланмыш ямяк щаггы цзря хярълярин аид едилмяси щесабы</azeri> </L> - <L id="469"> <russian>б) пособие в связи с трудовым увечьем и профессиональным заболеванием</russian> <english>b) return of benefits for work-related injuries and professional diseases</english> <azeri>б) ямяк задяси вя пешя хястялийи цзря мцавинятлярин гайтарылмасы</azeri> </L> </main> и производить поиск по id. С помощью каких функций можно производить поиск по значениям атрибутам? Можно ли вообще так искать, или надо перебирать все узлы? Файл достаточно большой и приходится очень часто обращатся к фунции поиска значений. Пишу на VC++ .Net. Использую MSXML. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 13:19 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
поиск по значениям атрибута можно проводить и так через SelectSingleNode или что-то в этом роде. Поиск по id будет эффективнее, но придётся явно объявлять, что это id, в doctype. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 14:05 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
Взял пример из MSDN, той функции, которую мне подсказали и попытался его совместить с примером из книги. Сделал так: Создал проект MFC - диалоговое приложение в файле stdafx.h записал #import <msxml.dll> named_guids using namespace MSXML; А в обработчике события кнопки написал: MSXML::IXMLDOMDocumentPtr XmlDocument; MSXML::IXMLDOMElementPtr book; MSXML::IXMLDOMElementPtr root; ::CoInitialize(NULL); HRESULT hr = XmlDocument.CreateInstance(MSXML::CLSID_DOMDocument); XmlDocument->load(S"booksort.xml"); root = XmlDocument->DocumentElement; book=root->SelectSingleNode(S"descendant::book[author/last-name='Austen']"); //Change the price on the book. book->LastChild->InnerText=S"15.95"; ::CoUninitialize(); Компилятор выдает такую ошибку: c:\Documents and Settings\User\My Documents\Visual Studio Projects\TestXML\TestXMLDlg.cpp(171): fatal error C1190: managed targeted code requires '#using <mscorlib.dll>' and '/clr' option Вот сижу теряюсь в догадках?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 15:59 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
если создаёшь манагед-приложение, придётся .net clr подрубать, о чём и написано. Ковыряй настройки, или подрубай слр или отключай управляемость. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 19:32 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
а что за S перед строками стоят? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 20:02 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
А где же я использую управляемый код? Разве нельзя через импорт использовать функции работы с парсером? Я через импорт работал с Excel и там не нужно было использовать managed. А S я и сам не знаю. Этот код взят из MSDN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 23:26 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
Как оказалось, компилятор ругался именно из-за этих S После того как я их убрал, все скомпилировалось. Но возникла другая проблема Код сейчас у меня следующий: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Документ загружается, о чем свидетелствует AfxMessageBox(str); Но вот на функции selectSingleNode программа вылетает в следующий кусок кода: Код: plaintext 1. 2. 3. 4. 5. В чем же может быть дело???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2006, 23:46 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
и чего говорит? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 13:30 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
Вот здесь return IXMLDOMNodePtr(_result, false);//Здесь дает ошибку говорит следующее: Unhandled exception at 0x7c81eb33 in TestXML.exe: Microsoft C++ exception: _com_error @ 0x0012f2d4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 13:38 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
ну дык отлавливай этот _com_error и отображай его описание. зы странный у тебя дебагер. зыы попробуй другой selectSingleNode воспользоваться, которай с двумя параметрами. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 14:25 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
maXmoну дык отлавливай этот _com_error и отображай его описание. зы странный у тебя дебагер. зыы попробуй другой selectSingleNode воспользоваться, которай с двумя параметрами. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm Спасибо, вам большое. Я разобрался оказывается надо было передавать параметр в следующем виде: book[author/last-name='Austen'] Все заработало. Правда есть еще одно желание, хочу искать по аттрибутам. Сейсас ищу так: <lang> <id> 1 </id> <val> Идф Идф Идф </val> </lang> Сначала нахожу по id, а потом перебираю уже в найденном узле все его подузлы. Но хочеться иметь файл такой структуры <lang id= "1"> <val> Идф Идф Идф </val> </lang> Как это можно реализовать, не подскажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2006, 17:41 |
|
||
|
Поиск значения в XML
|
|||
|---|---|---|---|
|
#18+
lang/@id='1' может, следует подключать msxml3.dll ? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 12:34 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2031198]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 338ms |

| 0 / 0 |
