Вопрос

Доброго дня, коллеги!

Стоит следующая задача - необходимо считать и отправить данные из объекта на удаленный веб-сервис. Удаленный веб-сервис принимает данные в формате XML. Подскажите пожалуйста, каким образом лучше всего это реализовать - используя бизнес-процессы, DataService или каким-либо другим способом? Заранее благодарю за развернутые ответы. 

У меня такой же вопрос

1 комментарий
Лучший ответ

Добрый день!
Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.
Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!
Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.
Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!
Террасофт 3.3.2 MSSQL
Стоит задача выгрузки накладной (шапки и табличной части продуктов) в формат xml

Подскажите, пожалуйста, какие методы для этого существуют.
Может быть есть какие-то примеры.

У меня такой же вопрос

2 комментария

Добрый день!
Маленький пример по сохранению данных в формат XML

function SaveXMLToFile() {
	var Dataset = Services.GetNewItemByUSI('ds_Account');
	Dataset.Open();
	var XMLStorage = GetNewXMLStorage();
	XMLStorage.LoadFromDataset(Dataset, 'QueryData');
	XMLStorage.SaveToFile('c:\\qq.xml');
	Dataset.Close();
}

Еще можно посмотреть примеры работой с XML в сервисе wnd_CalendarExchangeScript, начиная с функции SaveCalendarToFile

Спасибо

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, Сообщество!

Кто нибудь сталкивался с задачей отправки электронных счет фактур или актов в систему Диадок славной компании СБК Контур. Уже который месяц пытаюсь получить от них внятного и работающего примера, но вот никак. Есть пример, но он до конца не работает(

У меня такой же вопрос

3 комментария

Здравствуйте.
С системой Диадок не сталкивался, но на вскидку, можно попробовать записывать данные в их базу напрямую, например через шлюзовые таблицы или использовать что-то на подобие ADO-Connection.

В общем то там у них ActiveX библиотека, в которой реализована обертка над их Web API. Но примеров отправки готовых XML докуметов нету или я их не нашел, вот второй месяц поддержку мучаю, прислали скрипт, но он не работает.

Здравствуйте.
Повторю, что у нас прецедентов интеграции с такой системой не было, но, вероятно, Вам будет любопытно ознакомиться с: http://habrahabr.ru/company/skbkontur/blog/175871/

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!
Пытаюсь тут сделать очень хитрую штучку и никак не получается пока что
Очень нужно сформировать Word-отчет, в который нужно передать переменные и параметры, которые нужно вывести в отчете
Как бы это сделать?
Сам запрос, к сожалению, в виде XML передается в отчет
Движок уже сам разбирает его и формирует результирующий какой-то набор для отчета

Подскажите, пожалуйста, если кто сталкивался

У меня такой же вопрос

4 комментария

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Передать параметры действительно получилось через ProcessWordReportDataFill
Там была написана еще процедура, которая подменяла определенные макросы в тексте на переданные элементы из массива

А не подскажите еще? хотелось бы попробовать как-то нарисовать таблицу в Word из террасофта
Но пока не получается
Может кто-то пробовал рисовать в ворде из террасофта ?

Заранее благодарен за ответы

Иван, посмотрите здесь.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

В данном блоге хочу рассказать о возможностях, настройках и использовании RunSettings.xml. Данная возможность конфигурирования запуска, регистрации, обновления системы существует давно. Но, практически с каждым релизом новой версии она расширяется. Эта возможность появилась как инструмент "кастомизации" под конкретные задачи клиентов.
Рассмотрим наш RunSettings.xml:

Общие настройки

GlobalSettingsDirectory="" UserSettingsDirectory="" UserAppDataDirectory="" SessionDomainName="" SessionUserName="" SessionPassword=""/>

GlobalSettingsDirectory - путь к глобальному файлу конфигураций GlobalConfigs.xml
UserSettingsDirectory- путь к пользовательскому файлу конфигураций Confings.xml
UserAppDataDirectory- путь к папке Application Data пользователя
SessionDomainName - имя домена
SessionUserName - имя пользователя
SessionPassword - пароль пользователя

Теперь же рассмотрим подробнее что и как.
GlobalSettingsDirectory. Существуют задачи, в которых есть потребность иметь настройки к разным конфигурациям, но в тоже время нужно иметь глобальные конфигурации, которые пользователь удалить не сможет (если только не удалит файл GlobalConfigs.xml). Для создания GlobalConfigs.xml достаточно настроить Configs.xml и скопировать + переименовать его в GlobalConfigs.xml
UserSettingsDirectory. С этим параметром все просто. Если вам нужно хранить файл настройки конфигураций в отличном от %appdata% месте, то этот параметр для вас
UserAppDataDirectory. Этот параметр позволит переопределить для Terrasoft папку %appdata%
Далее идет блок, связан с аутентификацией. Что же это за параметры?
Иногда есть потребность запустить Terrasoft от имени другого пользователя, так вот, эти параметры и устанавливают от кого запускать
SessionDomainName. Если пользователь домменый, то указывается название домена
SessionUserName. Имя пользователя
SessionPassword. Пароль пользователя
Также, существует возможность использовать макросы в написании пути:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\Bin)
{win} - путь к папке Windows (Например: C:\Windows)
{tmp} - путь к папке Temp
{sys} - путь к системной папке Windows (Например: C:\Windows\System32)
{pf} - путь к папке Program Files
{usertscrmappdata} - путь к папке Terrasoft в AppData включая версию (Например: C:\Users\CurrentUser\AppData\Roaming\Terrasoft\3.4.1)
{userappdata} - путь к папке AppData (Например: C:\Users\CurrentUser\AppData)
{userdesktop} - путь к папке рабочего стола
{userstartup} - путь к папке Startup (Например: C:\Users\CurrentUser\Start Menu\Programs\Startup)
{userprofile} - путь к папке профиля пользователя (Например: C:\Users\CurrentUser)
ВАЖНО: Все макросы возвращают путь без последнего "слэша"

Настройки автообновления

Enabled="False" Force="False" Type="Network" Path="" URL="" FTPUserName="" FTPPassword="" MaxIterations="5"/>

Enabled - включено ли автообновление (True/False)
Force- принудительное обновление (True/False)
Type - тип обновления (Network/FTP)
Path - путь к файлам новой версии (используется для типа Network)
URL - путь к файлам новой версии (используется для типа FTP)
FTPUserName - имя пользователя (используется для типа FTP)
FTPPassword - пароль пользователя (используется для типа FTP)
MaxIterations - количество попыток автообновления

По большому счету со всеми параметрами все тривиально, но, хочу добавить касательно параметра Force. Если значение установлено в "False", то при обнаружении новой версии, пользователю отобразится диалоговое сообщение, в котором он может принять решение обновляться ли. В случае, когда значение установлено в "True", никакого сообщения не покажется, а сразу же начнется обновление

Системные настройки

ShowHint="True" HintHidePause="2500" ExternalAuthorizationProgID="" ConnectionKey=""/>

ShowHint- отображать ли хинты
HintHidePause - тайм-аут отображения хинтов
ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm.
Синтаксис:
HRESULT ShowLoginForm(
        [in] IConnector* Connector,
        [in] BSTR FormCaption,
        [in, out] BSTR* UserName,
        [in, out] BSTR* UserPassword,
        [in, out] BSTR* ConfigurationName,
        [out, retval] VARIANT_BOOL* Value);

ConnectionKey - данный ключ был создан для разрешения подключения к базе Oracle, так как в Oracle можно разграничивать приложения, которыми можно подключатся к БД. Этот ключ предоставляет администратор Oracle

Типы регистрации

>
Name="COM" FileName="regsvr32" RegistrationCommand="/s" UnregistrationCommand="/s /u" Default="True"/>
Name="Framework" FileName="%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\regsvcs.exe" UnregistrationCommand="/u"/>
>

Из названия атрибутов все становится ясным. Здесь прописаны файлы, с помощью которых осуществляется регистрация библиотек. Вы можете сами добавлять нужные типы.

Библиотеки для регистрации

FileName="TSClient.exe"/>
FileName="TSObjectLibrary.dll"/>
FileName="TSWindowLibrary.dll"/>

В данной секции находится список библиотек, которые будут перерегистрироваться. Путь к библиотеке указывается относительно папки Bin. Кроме FileName существует следующий набор атрибутов:
Dependence – атрибут, который указывает условие регистрации, т.е. если условие выполняется, то библиотека будет регистрироваться. По умолчанию условие отсутствует. Может принимать значения:
Win32 – если Windows 32-х битный;
Win64 – если Windows 64-х битный;
Office32 – если Office 32-х битный;
Office64 – если Office 64-х битный
Примечание: данный атрибут доступен только с версии 3.4.1
Required – указывает на обязательность наличия файла. Т.е. если Required = "False", и файл отсутствует, то система его пропустит. По умолчанию = True
IsSurrogate – указывает на то, что быблиотека будет/не будет регистрироваться как суррогатная. Этот параметр важен для работы с приложениями разрядности x64. Т.е., если мы указываем, что библиотека не является суррогатной (IsSurrogate = False), то 64-х битное приложение не сможет работать с объектами этой библиотеки. По умолчанию IsSurrogate = "True".
Примечание: данный атрибут доступен только с версии 3.4.1
RegistrationType – указывает каким обрахом будет регистрироваться библиотека в системе. Здесь указывается имя из RegistrationTypes. По умолчанию тип берется тот, в атрибуте которого указано IsDefault = "True"

Файлы для удаления

В этой секции можно указать список файлов, которые нужно удалить при перерегистрации. При этом, если файл существует и является зарегистрированной библиотекой, то произойдет отрегистрация, а после - удаление. Для этой секции справедливы все атрибуты из секции «Библиотеки для регистрации».
Примечание: Библиотека будет удалена независимо от того указан ли Dependence

PreUpdateRun, PostUpdateRun

В данных секциях можно указывать комманды, которые будут выполнены до/после автообновления.

FileName="" Parameters="" Show="False" UseSessionUser="False" Version=""/>

FileName – имя исполняемого файла;
Parameters – параметры для исполняемого файла. В данном атрибуте разрешается использовать макросы, описанные в секции «Общие настройки»;
Show – показывать ли запускаемое приложение (зависит от того, имеет ли такую возможность приложение);
UseSessionUser, Version – данные атрибуты не используются
Приведем пример очистки кэша до обновления. Для этого напишем ClearCache.cmd, который в качестве параметра должен принимать путь к папке кэша:
FileName="{tscrm}\ClearCache.cmd" Parameters="{usertscrmappdata}\Cache" Show="False" UseSessionUser="False" Version=""/>

PreExecuteRun

Секция PreExecuteRun имеет аналогичную логику с PreUpdateRun/PostUpdateRun за исключением того, что эти комманды будут выполняться всегда перед запуском приложения

Поделиться

3 комментария

Артем, в статье ошибка:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\), а не к С:\Program Files\Terrasoft\Bin.

"Андрей Каспаревич" написал:ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm

А какой интерфейс должен реализовывать COM объект?
У меня появляется сообщение об ошибке, что интерфейс не поддерживается.

Добрый день. Необходима поддержка IDispatch'а. Объект создается методом CreateOleObject

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Выгрузить XML-содержимое из базы данных в лог можно следующим образом:

DECLARE @tmp varchar(8000);

SELECT @tmp = cast(substring(QueryData, 1, 8000) AS varchar(8000)) FROM tbl_Query WHERE Name = 'Динамика резервирования'

PRINT @tmp

Когда это может быть полезно?

В случае, если не формируется один конкретный отчет и не открывается запрос для него, иногда требуется изучение содержимого пользовательского запроса.

В случае, если проблема в профиле конкретного пользователя, и требуется дополнительный анализ содержимого профиля.

Поделиться

1 комментарий

Следует отметить, что для получения содержимого сервисов (таблиц, запросов, датасетов и т.д) в виде XML в версиях 3.3.2 и 3.4 этот способ не подходит: они хранятся сжатыми. В 3.3.1 и более ранних - ещё работает.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Всем привет!
В последнее время очень часто спрашивают как oktell принимает и отправляет sms.
Вот решил написать небольшую заметку.

Итак - Теория:
Выдержка из руководства пользователя oktell:

Система  использует web-интерфейс для подключения к SMS-сервису. Среди провайдеров,  предоставляющих услуги, ZANZARA(получить логин и пароль можно здесь)  и MessageGroup (Украина). Взаимодействие осуществляется  посредством компонентов сценариев из группы SMS. В разделе настройкам  подвергаются нижеперечисленные параметры.SMS-провайдер.

Логин  для подключения к сервису.
Пароль  для подключения к сервису.
Номер по  умолчанию, на который приходят сообщения.
Номер по  умолчанию, подставляемый при отправке сообщений.

Подключаться  через Proxy-сервер.
Адрес  proxy.
Порт  proxy.
Логин к  proxy.
Пароль к  proxy.

Сразу возникает вопрос, а почему только 2 провайдера?

На самом деле рассылать  и принимать sms в oktell можно через любого провайдера который может Вам предоставить доступ к sms сервисам по XML протоколу. Но договариваться с каждым оператором мобильной связи не удобно, поэтому существуют так называемые контент-агрегаторы (так же их иногда называют контент-провайдерами ), у которых уже есть договорённость с несколькими операторами и свой сервер приложений с которым они Вам предложать работать через web-интерфейс и/или по XML протоколу.

Агрегатор - компания, работающая на рынке мобильного контента, занимающаяся установлением множественных договоренностей с отдельными контент- и сервис-провайдерами, а также с операторами связи для облегчения процесса организации доставки мобильного контента его потребителям - абонентам мобильной или фиксированной связи.

Количество таких агрегаторов на рынке - большое множество, поэтому Вы можете выбирать с кем сотрудничать изходя из личных предпочтений. Так же я бы рекомендовал обратить внимание на такие возможности (не у всех агрегаторов они есть):
 1. Оплата только за доставленные sms сообщения
 2. Возможность задавать "время жизни sms"
 3. Возможность регистрации динамического альфа-нумерического имени (об этом позже)
 4. Единоразовая оплата за покупку альфа-нумерического имени.

С первыми двумя пунктами думаю понятно.
Если Вы хотите отправлять sms то должен быть адрес с которого вы их отправляете, таких варианта может быть 2:
1. Альфа-нумерическое имя
2. Короткий номер

Альфа-нумерическое имя (или просто альфа-имя), это набор из максимум 11 символов, который будет отображатся у абонента как номер отправителя, зачастую это имя компании-отправителя. Тут есть важный момент. Альфа-имя может быть задано как латинскими так и кирилическими буквами, но в случае кирилических, автоматически максимальный размер 1 sms будет составлять 70 символов (можно отпралять и больше, но оплачиваются это уже будет как несколько sms).
Альфа-имена бывают 2х видов:
1. Статические
2. Динамические

Статическое имя покупается 1 раз и менять не может, стоит у каждого провайдера по разному, некоторые даже могут предложить бесплатно при больших рассылках. В среднем в Украине стоит единоразово 40-120$ в зависимости от жадности контент-агрегатора.

За динамическое имя, как правило, оплачивается абонплата. Имея динамическое альфа-имя вы можете отправлять sms от разных альфа-имён которых можете формировать бесконечное множество, что очень удобно если вы являетесь поставщиком таких услуг. В среднем в Украине стоит единоразово 150-400$ в месяц ,в зависимости от жадности контент-агрегатора.

Минус альфа-имён - они используются только для рассылки, абонент не сможет Вам ответить.

Если Вы собираетесь принимать sms, то Вам надо арендовать короткий  номер. При чём арендовать ндао у каждого моб. операта, от абонентов которого, Вы захотите принимать sms (Тоесть, например отправленая sms на номер 4555 абонентом Киевстара и абонентом МТС не обязательно прийдёт к одному и тому же получателю).

Эта услуга не дешовая, и очень зависит :
1. От жадности моб. оператора (у каждого может быть своя стоимость за номер)
2. От запоминаемости и краткости номера (тоесть 3х знаый номер 111 будет Вам стоить гораздо дороже чем 5-ти значный 15684)
Номера, как правило, арендуются на год.
В них есть смысл, если Вы проводите акции с обработкой входящих sms, тгда Вы сможете - перепродать котороткий номер сразу нескольким клиентам при условии что сможете структурировать входящий трафик и привязывать его к конкретным клиентам (Например клиент 1 всегда будет принимать только 7ми значные коды, клиент 2 будет принимать все sms которые начинаются с слова "hello" и т.д.)
Стоимость аренды на год такого номера у одного оператора может составлять даже несколько тысяч $.

Практика:
Для того чтобы рассылать/принимать sms от Вашего контент-агрегатора предоставившего XML протокол для обмена трафиком, Вам понадобиться:
1. Немножко терпения
2. Создание соответсвующего сценария с использованием компонетов "Запрос к Web-сервису"
3. Включение этого сценария в служебные задачи с указанием расписания (если сценарий служебный) и/или включение его в соответсвующую текстовую задачу колл-центра

Так же используя этот компонент Вы можете отправлять sms из диалоговых и IVR сценариев при необходимости.

Поделиться

5 комментариев

Спасибо за детальное описание! +1 :twisted:

--
www.it-sfera.com.ua

Иван, ОГРОМНОЕ спасибо за описание. Действительно очень полезно. Думаю у многих из нас закрыто много вопросов. Хотелось также, если это возможно, получить список контент-провайдеров, с которыми Вам приходилось работать, и с какими трудностями приходилось сталкиваться.

Спасибо!

Иван, честь Вам и хвала!:twisted:

Насчёт списка контент-провайдеров... думаю это будет выглядеть как реклама, осбенно если учесть что у меня есть личные предпочтения:)

Иван Сибиряков
Telsystems Ukraine
www.telsystems.com.ua

А Вы личным сообщением отошлите:smile:

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Здравствуйте!

Предлагаю Вашему вниманию некоторую реализацаю возможности выгрузки фильтров динамической группы в файл (*.xml) и загрузки для другой динамической группы.

Подробная инструкция прикреплена.

Приятной работы!

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

На примере, обьяснен общий принцип работы с XML в TestComplete (DelphiScript).

Для понимания XML советую предварительно просмотреть:
ru.wikipedia.org/wiki/XML - короткая и понятная статья по XML
www.w3schools.com/xml/ - руководство по XML

К примеру есть XML файл (сохранен по адресу ‘C:\Test.xml’):






Из него необходимо получить значение атрибутов Login, Password, Role.

Для этого необходимо выгрузить XML-файл в объект, понятный для среды разработки, который можно обрабатывать в скрипте.
TestComplete позволяет работать с любыми XML, используя DOM XML (msdn.microsoft.com/ru-ru/library/2bcctyt8.aspx - XML документы и данные).

Пример: Функция загружает указанный XML файл, если структура XML нарушена - выдает сообщение об ошибке XML-парсера, в результате работы функция возвращает объект.

function InitializeXML(APath: WideString): OleVariant;
var File: OleVariant;
 Doc: OleVariant;
 s: OleVariant;
begin
 File := APath;
 Doc := Sys.OleObject('Msxml2.DOMDocument.6.0');
 Doc.async := false;
 Doc.load(File);
 if Doc.parseError.errorCode <> 0 then
  begin
   s := 'Reason:' + #9 + Doc.parseError.reason + #13#10 +
   'Line:' + #9 + VarToStr(Doc.parseError.line) + #13#10 +
   'Pos:' + #9 + VarToStr(Doc.parseError.linePos) + #13#10 +
   'Source:' + #9 + Doc.parseError.srcText;
   Log.Error('Cannot parse the document.', s);
   Exit;
   end;
 Result := Doc;
end;

Для получения данных из XML используем средства DOM XML и XPath.
Для этого необходимо у объекта XML-документа (либо объекта XML-ноды), вызвать функцию selectNodes(), и передать в функцию XPath-запрос.
Пример:

XMLDoc.selectNodes('//User')

Функция selectNodes - возвращает коллекцию объектов, т.е. если даже результат запроса всего одна запись, возвращается коллекция с одним объектом. НЕЛЬЗЯ прямо обращаться к нодам атрибутам, полученным из selectNodes. т.е. выражение XMLDoc.selectNodes('//User').getAttribute('Login') - ошибочно. Правильно будет XMLDoc.selectNodes('//User').item(0).getAttribute('Login');
Чтобы узнать количество элементов (item) коллекции необходимо вызвать свойство length.
Пример: XMLDoc.selectNodes('//User').length - возвращает количество нод User в XML документе.
Для обработки всех элементов коллекции, необходимо пробежаться по каждому из них обращаясь по индексу элемента, причем обработку необходимо проводить в соответствии с возвращаемым типом данных (ноды, атрибуты, текст)

Пример: Получение данных

procedure TestDOMXML();
var XMLDoc: OleVariant;
 i: Integer;
 User: WideString;
 Password: WideString;
 Role: WideString;
begin
 XMLDoc := InitializeXML('C:\Test.xml');
 for i:=0 to XMLDoc.selectNodes('//User').length-1 do
  begin
   User:= XMLDoc.selectNodes('//User/@Login').item(i).text;
   Password:= XMLDoc.selectNodes('//User/@Password').item(i).text;
   Role:= XMLDoc.selectNodes('//User/@Role').item(i).text;
   Log.Message('User: ' + User + ' Password: ' + Password + ' Role: ' + Role);
  end;
end;

возможен другой вариант цикла обработки
for i:=0 to XMLDoc.selectNodes('//User').length-1 do
  begin
   User:= XMLDoc.selectNodes('//User').item(i).getAttribute('Login').text;
   Password:= XMLDoc.selectNodes('//User').item(i).getAttribute('Login').text;
   Role:= XMLDoc.selectNodes('//User').item(i).getAttribute('Login').text;
   Log.Message('User: ' + User + ' Password: ' + Password + ' Role: ' + Role);
  end;

XPath - выражение //User/@Login - выбирает из XML все ноды User, у каждой из них выбирает указанный атрибут (Login, Password, Role). Если запрошенного атрибута нет, то возвращается Null (или если привести к строке '0')

Если есть задача получить ноды, или получить значение атрибута ноды определенного типа, условия фильтрации удобно вмещать в выражение XPath:
Пример: Получить логины пользователей, которые являются администраторами:

//User[@Role='Administrator']/@Login

такое выражение вернет коллекцию логинов пользователей, которые являются администраторами.

Поделиться

2 комментария

привет, твоя статья мне очень помогла:) А есть пример как добавлять инфу в хмл? иль хоть линка где рпо это почитать?:)

советую обращаться к первоисточникам MSDN

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Что такое XPath?

XPath - это синтаксисдля адресации частей XML-документа

XPath - использует пути для адресации элементов XML

XPath - является важнейшей частью стандарта XSLT

XPath - не является XML-форматом

XPath - является стандартом W3C

 

XPath - использует адресные выражения для идентификации узлов в XML-документе. Эти адресные выражения очень похожи на выражения, с которыми вы сталкиваетесь при работе с файловой системой компьютера:

w3schools/xpath/default.asp

 Пример XPath

Empire Burlesque Bob Dylan USA Columbia 10.90 1985 Hide your heart Bonnie Tyler UK CBS Records 9.90 1988

Это выражение XPath:

catalog/cd/price

определяет элементы price, дочерние относительно элементов cd, подэлементов элемента catalog

Пути адресации XPath

Выражения для Путей Адресации

Имя

Описание

Пример

Результат

/

Дочерний элемент узла

/price

элемент price

//

Узел и его дочерние элементы

//cd

элемент cd и его подэлементы

|

список дочерних элементов

price | title

элемент price и title

Оси

Оси служат для определения набора узлов относительно данного узла.

Имя

Описание

Узел

self

сам узел

 

child

Дочерние узлы

 

parent

Родительский узел

 

descendant

Потомки узла

 

descendant-or-self

Узел и его потомки

 

ancestor

Предки узла

 

ancestor-or-self

Сам узел и его предки

 

following

Все узлы после данного

 

following-sibling

Все узлы этого же уровня после данного

 

preceding

Все узлы перед данным

 

preceding-sibling

Все узлы этого же уровня перед данным

 

attribute

Узлы аттрибутов

 

namespace

Узлы пространства имен

 

 

Предикаты Путей Адресации

Предикаты - это выражения, использующиеся для построения конкретных подмножеств узлов на основе данного.

Предикаты записываются внутри квадратных скобок.

Например, child::price[price=9.90] возвращает множество узлов, где элемент price имеет значение 9.90.

Новое множество узлов содержит все узлы, для которых значение предиката верно.

Сокращения для Путей Адресации

При описании путей адресации могут использоваться сокращения.

Сокращение

Значение

 

child::

@

attribute::

.

self::

..

parent::

//

/descendant-or-self/

число

[position()='значение']

Выражения XPath

Числовые Выражения

Числовые выражения используются для выполнения арифметических операций над числами.

Оператор

Описание

Пример

Результат

+

Сложение

6 + 4

10

-

Вычитание

6 - 4

2

*

Умножение

6 * 4

24

div

Деление

8 div 4

2

mod

Остаток от деления

5 mod 2

1

Замечание: XPath всегда преобразует аргумент в число перед выполнением арифметических операций.

Операции равенства

Операции равенства используются для проверки равенства двух значений.

Оператор

Описание

Пример

Результат

=

Равно

price=9.80

'истина' (если значение price равно 9.80)

!=

Не равно

price!=9.80

'ложь'

 

Проверка по Множеству Узлов

В случае, когда тестовое значение проверяется на равенство по множеству узлов, результатом будет 'истина', если множество узлов содержит какой-либо узел со значением, которое соответствует тестовому значению.

Когда тестовое значение проверяется на неравенство по множеству узлов, результатом будет 'истина', если множество узлов содержит хотя бы один узел со значением, отличным от тестового.

В итоге множество узлов может быть равно и не равно одновременно!!!

Операции Сравнения

Эти операции используются для сравнения двух значений.

Оператор

Описание

Пример

Результат

Меньше

price

'ложь' (если price равно 9.80)

Меньше или равно

price

'истина'

Больше

price>9.80

'ложь'

>=

Меньше или равно

price>=9.80

'истина'

Замечание: XPath всегда преобразует каждый аргумент в число перед выполнением сравнения.

Булевы Выражения

Оператор

Описание

Пример

Результат

or

или

price=9.80 or price=9.70

'истина' (если price равно 9.80)

and

и

price

 

 

Функции XPath

Библиотека Функций XPath

Библиотека функций XPath включает набор базовых функций для преобразования данных.

Числовые Функции

Имя

Описание

Пример

Результат

round

Округляет до ближайшего целого.

round(3.14)

3

ceiling

Округляет до ближайшего целого, которое больше данного.

ceiling(3.14)

4

floor

Округляет до ближайшего целого, которое меньше данного.

floor(3.14)

3

count

Возвращает количество узлов.

count(nodeset)

количество узлов в множестве узлов

number

Преобразует аргумент в число.

number(price)

Численное значение элемента price

sum

Возвращает сумму списка чисел.

sum(/cd/price)

Суммарная цена всех CD

 

Строковые Функции

Имя

Описание

Пример

Результат

string

Преобразует аргумент в строку.

string(3.14)

'3,14'

string-length

Возвращает длину строки.

string-lenght('Beatles')

7

substring

Возвращает подстроку.

substring('Beatles',1,4)

'Beat'

substring-after

Возвращает остаток строки после второго аргумента.

substring-after('12:30',':')

'30'

substring-before

Возвращает часть строки перед вторым аргументом.

substring-before('12:30',':')

'12'

contains

Возвращает 'истину', если первая строка содержит вторую.

contains('XML','X')

'истина'

starts-with

Возвращает 'истину', если первая строка начинается второй.

starts-with('XML','X')

'истина'

concat

Возвращает конкатенацию двух строк.

concat('The',' ','Beatles')

'The Beatles'

normalize-space

Удаляет лишние пробелы в строке.

normalize-space('  The    Beatles')

'The Beatles'

translate

Заменяет символы в строке.

translate('12:30',':','.')

'12.30'

 

Булевы Функции

Имя

Описание

Пример

Результат

boolean

Преобразует аргумент к булевому типу.

boolean(3.14)

'истина', если price не равен нулю

false

Вовращает 'ложь'.

number(false())

0

true

Возвращает 'истину'.

number(true())

1

not

Возвращает отрицание.

not(false())

'истина'

Источник: www.w3schools.com/XPath/default.asp

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать