|
XPath и XML. Как нафильтровать нужные теги? | ☑ | ||
---|---|---|---|---|
0
GANR
26.08.15
✎
17:45
|
Дано:
1. XML-ка с 1000 тегов МойТегУровня2\МойТегУровня2\МоиПодтеги...\. 2. В теге МойТегУровня2 есть атрибут МойАтрибут. 3. Выражение XPath /МойТегУровня2/МойТегУровня2[@МойАтрибут='МоеЗначениеФильтрации'] Нужно получить: XML-ку, представляющую набор тегов как сказано в п.1, НОООО только тех тегов которые соответствуют выражению XPath в п.3 вместе с вложенными Подтегами Подскажите, пожалуйста, редакторы, которые позволяют выполнить подобную задачу как можно ленивее, либо код на 1С, который на вход получает выражение XPath + исходную XML-ку, а на выходе дает отфильтрованную ХМЛ-ку. |
|||
1
GANR
26.08.15
✎
17:49
|
Пардон [МойТегУровня2\МойТегУровня2\] читаем как "МойТегУровня1\МойТегУровня2\"
|
|||
2
trad
26.08.15
✎
20:12
|
если восьмерка, то ПреобразованиеXSL и изучить XSLT
|
|||
3
Рэйв
26.08.15
✎
20:20
|
Есть же штатные вещи чтения xml.
Если не умеешь напрямуюписать - пользуйся тем что дают |
|||
4
kabanoff
26.08.15
✎
20:46
|
Бьюсь с тем же самым.
Нужно отфильтровать строки в большом XML. Обычный перебор строк работает очень долго. Делаю вот так: ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ФайлXML); РазыменовательDOM = Новый РазыменовательПространствИменDOM(ДокументDOM); ВыражениеXPath = ДокументDOM.СоздатьВыражениеXPath("*[@Номенклатура=""Моя номенклатура""]", РазыменовательDOM); РезультатXPath = ВыражениеXPath.Вычислить(ДокументDOM, ТипРезультатаDOMXPath.Любой); Пока Истина Цикл Узел = РезультатXPath.ПолучитьСледующий(); Если Узел = Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; Но почему-то в любом случае у меня получается Узел = Неопределено. Структура XML такая: <?xml version="1.0" encoding="UTF-8"?> <Документ xmlns:v8="http://v8.1c.ru/data" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Версия="1.2"> <Идентификатор xsd:string="2a759103-a052-4177-9378-69d9196ab582"/> <Номер xsd:string="0000000000000000001"/> <Дата xsd:dateTime="2015-08-26T17:49:33"/> <Валюта CatalogRef.Валюты="5f42f1bd-31ed-11e4-9a5e-002590e54fc9"/> <Поставщик xsd:string="ООО Вектор"/> <ПометкаУдаления xsd:boolean="false"/> <Цены Колонки="Номенклатура,Цена"> <Строки> <Номенклатура xsd:string="Моя номенклатура 1"/> <Цена xsd:string="10000"/> </Строки> <Строки> <Номенклатура xsd:string="Моя номенклатура 2"/> <Цена xsd:string="5000"/> </Строки> </Цены> </Документ> |
|||
5
GANR
26.08.15
✎
21:25
|
(4) Скорее всего, вот эта штука "*[@Номенклатура=""Моя номенклатура""]" неправильная - кавычка в правой стороне выражения должна быть ОДИНАРНОЙ как в "/МойТегУровня1/МойТегУровня2[@МойАтрибут='МоеЗначениеФильтрации']"
|
|||
6
Asmody
26.08.15
✎
21:31
|
на ИС я встречал как минимум две обработки для отладки xpath
|
|||
7
kabanoff
26.08.15
✎
21:32
|
(5) Да, ты прав. У меня прокатила вот такая строка поиска:
//Номенклатура[@xsd:string='Моя номенклатура 1'] Мне помогла статья: http://easywebscripts.net/useful/xpath.php |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |