Имя: Пароль:
1C
 
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
Ошибка? Это не ошибка, это системная функция.