Стд::Xml::XPath::ПоискXPath
Объе кт для поиска XPath по документу XML.
Сравнение
Ссылочное
Иерархия типа
Базовые типы: Объект
Примеры
Общие примеры
Исходная строка XML
<?xml version="1.0" encoding="UTF-8"?>
<ОстаткиТоваров xmlns="http://company/data/stock">
<Склад Код="M001">
<Товар Код="Т100" ЕИ="шт">
<Запас Вид="1" Количество="20.00"/>
<Запас Вид="2" Количество="80.00"/>
</Товар>
</Склад>
<Склад Код="M002">
<Товар Код="Т100" ЕИ="шт">
<Запас Вид="1" Количество="2.00"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
<Товар Код="Т101" ЕИ="шт">
<Запас Вид="1" Количество="10.00"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
<Товар Код="Т102" ЕИ="л">
<Запас Вид="1" Количество="1.00"/>
<Запас Вид="2" Количество="5.00"/>
</Товар>
<Товар Код="Т103" ЕИ="кг">
<Запас Вид="1" Количество="5.50"/>
<Запас Вид="2" Количество="10.00"/>
</Товар>
</Склад>
</ОстаткиТоваров>
Код поиска XPath
структура СтруктураПоискТовары
обз пер Товары: Множество<СтруктураПоискТовар>
;
структура СтруктураПоискТовар
обз пер Код: Строка
обз пер КодСклада: Строка
обз пер ОбщееКоличество: Число
обз пер ЕИ: Строка
;
метод НайтиОстаткиТовараНаСкладе(ДокументXml: Файл)
знч КодСклада = "M002"
исп ПотокЧтения = ДокументXml.ОткрытьПотокЧтения()
знч ПрефиксыПространствИмен = {"": "http://company/data/stock"}
знч ПараметрыПоиска = {"КодСклада": КодСклада}
знч ВыражениеXPath = новый ВыражениеXPath("/ОстаткиТоваров/Склад[@Код = \$КодСклада]", ПрефиксыПространствИмен)
знч Поиск = новый ПоискXPath(ВыражениеXPath, ПараметрыПоиска)
знч УзелСклад = Поиск.НайтиПервый(ПотокЧтения)
если УзелСклад == Неопределено
возврат
;
знч ОбщееКоличество = ВычислитьОбщееКоличествоXPath(УзелСклад, ПрефиксыПространствИмен)
знч Товары = НайтиТовары(УзелСклад)
знч ВыражениеXPath2 = новый ВыражениеXPath("Товар[Запас[@Вид = \$ВидЗапаса]/@Количество > \$Количество)]/@Код", ПрефиксыПространствИмен)
знч ПоискКодовТоваров = новый ПоискXPath(ВыражениеXPath2)
пер ПараметрВидЗапаса = 2
пер ПараметрК оличество = 5
пер КодыТоваров = НайтиКодыТоваровСОстаткамиПоВидуЗапаса(ПоискКодовТоваров, УзелСклад, ПараметрВидЗапаса, ПараметрКоличество)
ПараметрВидЗапаса = 1
ПараметрКоличество = 5.4
КодыТоваров = НайтиКодыТоваровСОстаткамиПоВидуЗапаса(ПоискКодовТоваров, УзелСклад, Пара метрВидЗапаса, ПараметрКоличество)
;
метод ВычислитьОбщееКоличествоXPath(УзелСклад: УзелXmlDom, ПрефиксыПространствИмен: ЧитаемоеСоответствие<Строка, Строка>): Число
знч ВыражениеXPath = новый ВыражениеXPath("sum(Товар/Запас/@Количество)", ПрефиксыПространствИмен)
знч Поиск = новый ПоискXPath(ВыражениеXPath)
знч ОбщееКоличество = Поиск.НайтиПервый(УзелСклад).ЗначениеКакЧисло()
возврат ОбщееКоличество
;
метод НайтиТовары(УзелСклад: УзелXmlDom): СтруктураПоискТовары
пер ТоварыРезультат = новый СтруктураПоискТовары(новый Множество<СтруктураПоискТовар>())
знч Товары = УзелСклад.ПолучитьДочерниеУзлы("Товар")
для Товар из Товары
пер ОбщееКоличество: Число
знч КодТовара = Товар.ПолучитьАтрибут("Код").ЗначениеКакСтрока()
знч КодСклада = Товар.ПолучитьРодительскийУзел().ПолучитьАтрибут("Код").ЗначениеКакСтрока()
знч ЕИ = Товар.ПолучитьАтрибут("ЕИ").ЗначениеКакСтрока()
знч Запасы = Товар.ПолучитьДочерниеУзлы("Запас")
для Запас из Запасы
ОбщееКоличество += новый Число(Запас.ПолучитьАтрибут("Количество").ЗначениеКакСтрока())
;
ТоварыРезультат.Товары.Добавить(новый СтруктураПоискТовар(КодТовара, КодСклада, ОбщееКоличество, ЕИ))
;
возврат ТоварыРезультат
;
метод НайтиКодыТоваровСОстаткамиПоВидуЗапаса(Поиск: ПоискXPath, УзелСклад: УзелXmlDom, ПараметрВидЗапаса: Число, ПараметрКоличество: Число): ЧитаемоеМножество<Строка>
знч КодыТоваров = новый Множест во<Строка>()
Поиск.УстановитьПараметр("ВидЗапаса", ПараметрВидЗапаса.ВСтроку())
Поиск.УстановитьПараметр("Количество", ПараметрКоличество.ВСтроку())
знч УзлыКодыТоваров = Поиск.Найти(УзелСклад)
если УзлыКодыТоваров.Пусто()
возврат КодыТоваров
;
для УзелКодТовара из УзлыКодыТоваров
КодыТоваров.Добавить(УзелКодТовара.ЗначениеКакСтрока())
;
возврат КодыТоваров
;
См. также
ЧтениеXml
Конструкторы
ПоискXPath
Конструктор поиска XPath
- Выражение - выражение типа ВыражениеXPath
- Параметры - соответствие Имя параметра (без $) - Значение параметра, по умолчанию
Неопределено
Исключения
ИсключениеНедопустимыйАргумент - если в выражении используется параметр, но он отсутствует в Параметры конструктора
Свойства
Выражение
ТолькоЧтение
Выражение XPath.
Параметры
ТолькоЧтение
Параметры поиска в выражении XPath. Если не используются - Неопределено.
Методы
Найти
Найти по выражению XPath, возвращает все найденные узлы, если не найдено, возвращается пустой массив.
Исключения
ИсключениеПостроенияXmlDom - если в качестве источника используется ПотокЧтения, и при построении документа XML возникнет ошибка.
ИсключениеПоискаXPath - если в выражении XPath используется параметр, но при поиске его значение не было установлено.
НайтиКакМассив
Найти по выражению XPath и вернуть результат как массив, построенный по функции array в выражении XPath 3.1, если узлы не найдены - возвращается пустой массив.
Пример выражения XPath
[/root/row[@attr='a'][1], /root/row[@attr='b'][1], /root/row[@attr='c'][1]]
Исключения
ИсключениеПостроенияXmlDom - если в качестве источника используется ПотокЧтения, и при построении документа XML возникнет ошибка.
ИсключениеПоискаXPath - если в выражении XPath используется параметр, но при поиске его значение не было установлено, или ошибка конвертации.
НайтиКакСоответствие
Найти по выражению XPath и вернуть результат как соответствие, построенное по функции map в выражении XPath 3.1, если узлы не найдены - в значении возвращается пустой массив.
Пример выражения XPath
map{'keyA': /root/row[@attr='a'][1], 'keyB': /root/row[@attr='b'][1]}
Исключения
ИсключениеПостроенияXmlDom - если в качестве источника используется ПотокЧтения, и при построении документа XML возникнет ошибка.
ИсключениеПоискаXPath - если в выражении XPath используется параметр, но при поиске его значение не было установлено, или ошибка конвертации.
НайтиПервый
Найти по выражению XPath до первого найденного узла, если не найдено -
Неопределено.
Исключения
ИсключениеПостроенияXmlDom - если в качестве источника используется ПотокЧтения, и при построении документа XML возникнет ошибка.
ИсключениеПоискаXPath - если в выражении XPath используется параметр, но при поиске его значение не было установлено.
УстановитьПараметр
Установить параметр и его значение
- Имя - имя параметра без префикса $
- Значение - значение параметра
Исключения
ИсключениеНедопустимыйАргумент - при попытке установить параметр, который не используется в выражении XPath.
Список унаследованных методов
Объект
ВСтроку
ПолучитьТип
Представление