XSLT Saxon

  • Автор темы Автор темы oshmianski
  • Дата начала Дата начала
как диагностируется нерабочесть? дублирование трансформации убрали?
 
Убрала. Код фиксирует результат
1) выгрузки
2) трансформации
3) запроса на внешний веб-сервис
в РТ-поля. Они пустые остаются - значит ничего не сработало.

Вообще логика работы такая - в одной базе есть документ и кнопка. По нажатию кнопки документ копируется в другую базу, где есть те самые РТ-поля и находится код с парсером и запросом на веб-сервис.
 
лог чего кажет (в Java Console)
 
требуется какое-то нереальное шаманство вроде запустить дебагер лотусскрипта - открыть джава-консоль, наверное, еще что-то, и тогда все работает отлично и в полном объеме. Перезагрузка лотусового клиента - и все, уже ничего не работает вообще... Не понимаю, как такое может быть, потому что в принципе код рабочий и отлаженный...
У меня было такое, когда пытался сделать модальный Java-диалог и пытался прицепиться к инстансу Лотуса, так вот всё работало прекрасно при открытом окне Java-консоли, - диалог на самом деле цеплялся не к Лотусу, а к окну консоли.

Ещё была ситуация: первый раз код выполняется, а все последующие нет. Причина: SWT-объекту после использования не делал recycle.

Правда не знаю, на сколько это может помочь в данной ситуации.
 
лог чего кажет (в Java Console)

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

Добавлено:
У меня было такое, когда пытался сделать модальный Java-диалог и пытался прицепиться к инстансу Лотуса, так вот всё работало прекрасно при открытом окне Java-консоли, - диалог на самом деле цеплялся не к Лотусу, а к окну консоли.

Ещё была ситуация: первый раз код выполняется, а все последующие нет. Причина: SWT-объекту после использования не делал recycle.

Правда не знаю, на сколько это может помочь в данной ситуации.

Может, лучше запускать полностью весь код на сервере (методом RunOnServer)? Насколько это могло бы помочь?
 
сувать UNID в java, там получать doc, экспорт в стринг (там экспортер могет), из кот. типа
<!--shcode--><pre><code class='java'> String dxlOut=exporter.exportDxl(doc);
ByteArrayInputStream in = new ByteArrayInputStream(dxlOut.getBytes("UTF-8"));[/CODE]

Добавлено: тока вспомнил... в ЛС тожа есть
Код:
dxl$ = notesDXLExporter.Export( input )
т.е. можно
Код:
Set exporter = session.CreateDXLExporter
output = exporter.Export(doc)
и не морочиться со стримом
 
Imike,

спасибо за идею чтобы без стрима, переделала, теперь все гораздо прозрачнее. Но проблема все равно остается. Картина такая: если перезайти в лотус и сразу зайти в базу, где происходит обработка XML, и через агента вызвать все манипуляции (выгрузка, трансформация, запрос) - агент берет документ по каретке, и дальнейшая обработка идентична - то все работает. Если не закрывая лотус вызвать процесс из другой базы, в которой пасутся пользователи, то тоже все срабатывает. Если же переоткрыть лотус и пойти сразу в пользовательскую базу, то ничего не получится.
Теряюсь в догадках... Были сначала еще мессежди - лотуса и явы - для контроля, убрала, без них все то же самое...
 
Если не закрывая лотус вызвать процесс из другой базы, в которой пасутся пользователи, то тоже все срабатывает. Если же переоткрыть лотус и пойти сразу в пользовательскую базу, то ничего не получится.
я себе смутно представляю эту схему :D
 
Если же переоткрыть лотус и пойти сразу в пользовательскую базу, то ничего не получится.
Что значит "ничего не получится"? Ошибки есть какие на консоли?
Если ошибок нет, значит что-то не инициализируется и просто происходит выход (где-то условия стоят на выход). В таком случае тестируйте с помощью System.out.println("тра-та-та"), другого варианта я не вижу.
Может, лучше запускать полностью весь код на сервере (методом RunOnServer)? Насколько это могло бы помочь?
Если в Java-коде не используется UI, то ничего не мешает попробовать :D Хотя я сомневаюсь, нужно тестить "принтами", как описал выше.
 
Всем доброго времени суток!

Опять появилась проблема с тем парсером, который обсуждался в этом топике. Появилась она после того, как я перенесла исполнение кода java на сервер. То есть теперь методом runOnServer запускается агент, который выгружает указанный документ в dxl, а затем вызывает XSL-трансформацию полученного dxl средствами java-библиотеки (saxon). Dxl выгружается нормальный, а после передачи на вход парсеру половина xml-скобок <> заменяется на ">" и "<" (это показывают принты из java-кода). Входной xml печатается сразу после получения параметров, до всякой трансформации, и уже успевает каким-то образом поломаться! В итоге трансформатор возвращает false.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вот код вызова java-парсера</div></div><div class="sp-body"><div class="sp-content">
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.xml.sax.SAXException;

import javax.swing.*;

public class SaxonXML2Transformer {
public static String TrasformFFF(String sourceXML, String sourceXSL)
throws TransformerException {
try {
System.out.println("SOURCE XML: "+sourceXML);
System.out.println("SOURCE XSL: "+sourceXSL);
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

// Create a transform factory instance.
TransformerFactory tfactory = TransformerFactory.newInstance();
// Create a transformer for the stylesheet.
Transformer transformer =
tfactory.newTransformer(new StreamSource(new ByteArrayInputStream(sourceXSL.getBytes("UTF-8"))));

// Transform the source XML to System.out.
ByteArrayOutputStream resultXML=new ByteArrayOutputStream();
transformer.transform(new StreamSource(new ByteArrayInputStream(sourceXML.getBytes("UTF-8"))), new StreamResult(resultXML));
try {
String out = new String(resultXML.toByteArray(), "UTF-8");
return out;

} catch (Exception e) {
handleException(e);
}
} catch (Exception ex) {
handleException(ex);
}
return "";
}

private static void handleException(Exception ex) {

System.out.println("EXCEPTION: " + ex);
ex.printStackTrace();

if (ex instanceof TransformerConfigurationException) {
System.out.println();
System.out.println("Test failed");

Throwable ex1 =
((TransformerConfigurationException) ex).getException();

if (ex1!=null) { // added by MHK
ex1.printStackTrace();

if (ex1 instanceof SAXException) {
Exception ex2 = ((SAXException) ex1).getException();

System.out.println("Internal sub-exception: ");
ex2.printStackTrace();
}
}
}
}
}



Буду признательна за любые идеи!
 
ну ваще-то виноват либо xslt либо xml (парсер - маловероятно)
чего может не хватать - нэймспейсов, ежели какой не подпадает под определенные - будет интерпретироваться как текст (что у вас и получается)
 
Наверное, проблема в неймспейсах... Сейчас у меня две трансформации - первая удаляет dxl-ный неймспейс xmlns='http://www.lotus.com/dxl', а вторая уже преобразовывает документ к нужному формату. В таком случае, наверное, стоит переделать на одну трансформацию, чтобы преобразование матчило лотусовый неймспейс... Если честно, не получается заставить это работать. Нужно, чтобы в переменную $dxl загружался, соответственно, форматируемый dxl (после редактирования уже не его корень, а элемент document лотусового пространства имен), и все нужные его элементы трансформировались в другие элементы по словарю трансформации. Загуглила, поправила xsl, стало так:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">xsl</div></div><div class="sp-body"><div class="sp-content">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:l='http://www.lotus.com/dxl'>
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/l:document">
<ApplicationFile>
<xsl:variable name="dxl" select="/l:document"/>
<get_status>0</get_status>
<xsl:element name="applicationid">
<xsl:value-of select="normalize-space($dxl/item[@name='ClaimNo']//.)"/>
</xsl:element>
<xsl:element name="applicationdate">
<xsl:value-of select="normalize-space($dxl/item[@name='CreationDate']//.)"/>
</xsl:element>
<ApplicationsList>
<login>fff</login>
<password>ggggg</password>
<partnerid>IPB</partnerid>
<xsl:for-each select="document('dictionary.xml')/root/item">
<xsl:variable name="equiName">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:variable name="dxlName">
<xsl:value-of select="./@dxlName"/>
</xsl:variable>
<xsl:element name="{$equiName}">
<xsl:value-of select="normalize-space($dxl/item[@name=$dxlName]//.)"/>
</xsl:element>
</xsl:for-each>
<type>1</type>
<bki_list>equ;nbk;exp</bki_list>
</ApplicationsList>
</ApplicationFile>
</xsl:template>
</xsl:stylesheet>

Словарь имеет такую структуру (это небольшая часть):
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">dictionary.xml</div></div><div class="sp-body"><div class="sp-content">
<?xml version='1.0' encoding='utf-8' ?>
<root>
<item dxlName="F">lastname</item>
<item dxlName="I">firstname</item>
<item dxlName="O_equi">middlename</item>
<item dxlName="PreviousF_equi">pastlastname</item>
<item dxlName="BirthDateEQ">birthday</item>
<item dxlName="BirthPlace">birthplace</item>
</root>

Тестирую через Oxygen (думаю, надо, чтобы сначала в нем все заработало, а потом уже мучить Лотус).
Имеется две проблемы:
1. теги в выходном документе создаются, но остаются пустыми
2. элемент ApplicationFile имеет лотусовый неймспейс - так результирующая xml-ка не пройдет валидацию на сервере, куда она будет отправлена как запрос

Imike, не могли бы вы мне немного помочь с этим?
 
что нужно получить в результате, т..е я понимаю что обычный доминошный док надо преобразовать к "нужному" хмл
вот и требуется вид нужного хмл (или не хмл)
др. словами - то, что словарь - это оно?
 
Не, словарь - это просто мепинг, который говорит, из какого поля в dxl какое выходное поле нужно сделать. Пример того, что нужно - выходного XML (я подсократила его, а то очень много букв):
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">итоговый XML</div></div><div class="sp-body"><div class="sp-content">
<?xml version="1.0" encoding="utf-8"?>
<ApplicationFile>
<get_status>0</get_status>
<applicationid>111</applicationid>
<applicationdate>30.09.2012 10:00:00</applicationdate>
<ApplicationsList>
<login>admin</login>
<password>admin</password>
<partnerid>123</partnerid>
<applicationid>111</applicationid>
<applicationdate>30.09.2012 10:00:00</applicationdate>
<incomeproof>99</incomeproof>
<main_income>50000</main_income>
<rent_income>30000</rent_income>
<divid_income>2000</divid_income>
<places_income>13000</places_income>
<other_income>500</other_income>
<credits_montlypay>0</credits_montlypay>
<alimony>12500</alimony>
<dependants>1</dependants>
<utilities_charges>2550</utilities_charges>
<other_charges>10000</other_charges>
<ba_phone>89162223333</ba_phone>
<ba_country>99</ba_country>
<ba_index>EMPTY</ba_index>
<ba_region>EMPTY</ba_region>
<ba_district>EMPTY</ba_district>
<ba_city>EMPTY</ba_city>
<ba_settlement>EMPTY</ba_settlement>
<ba_street>EMPTY</ba_street>
<ba_house>EMPTY</ba_house>
<ba_building>EMPTY</ba_building>
<ba_structure>EMPTY</ba_structure>
<ba_apartment>EMPTY</ba_apartment>
<producttype>4</producttype>
<productname>1</productname>
<originalchannel>1</originalchannel>
<productsumlimit>100000</productsumlimit>
<productsumcurrency>RUR</productsumcurrency>
<exchange name="RUR">1</exchange>
<downpaymentamount>0</downpaymentamount>
<downpayment_percent>0</downpayment_percent>
<percent_day>0.03</percent_day>
<percent>12</percent>
<cred_duration>60</cred_duration>
<guarant_commercial>0</guarant_commercial>
<ensuring>0</ensuring>
<collateralexistence>0</collateralexistence>
<collateralvalue>0</collateralvalue>
<purchaseexistence>0</purchaseexistence>
<purchasevalue>0</purchasevalue>
<purchasemodel>NULL</purchasemodel>
<psk>112000</psk>
<pos_code>1</pos_code>
<pos_phone>EMPTY</pos_phone>
<pos_country>99</pos_country>
<pos_index>EMPTY</pos_index>
<pos_region>EMPTY</pos_region>
<pos_district>EMPTY</pos_district>
<pos_city>EMPTY</pos_city>
<pos_settlement>EMPTY</pos_settlement>
<pos_street>EMPTY</pos_street>
<pos_house>EMPTY</pos_house>
<pos_building>EMPTY</pos_building>
<pos_structure>EMPTY</pos_structure>
<pos_apartment>EMPTY</pos_apartment>
<consent>1</consent>
<consentdate>01.04.2013</consentdate>
<consent_pd>1</consent_pd>
<criminal_respons>0</criminal_respons>
<psychoneurological>0</psychoneurological>
<uncapable>0</uncapable>
<initialsumcurrency>RUR</initialsumcurrency>
<applicationfraudstatus>9</applicationfraudstatus>
<defaultstatus>9</defaultstatus>
<type>111</type>
<bki_list>equ;nbk;exp</bki_list>
</ApplicationsList>
</ApplicationFile>


У меня и XSD-схема для валидации есть, если вдруг нужна:)
 
для меня все ещё остаётся неясным:
-связь стр-ры ДХЛ и результата - вложенность нод и т.п - нужно просто мапить айтемы к другим?
-составленный хмл соответствий - я её не понял
т.е. нужно как-то так:
нода такая-то с такими-то атрибутами ДХЛ превращается в такую/и-то результата
если соответ. не один к одному - будет сложнее
словарь это описывает?
или можно просто короткий ДХЛ и результат обработки, чтобы сам мог увидеть
 
Итак, что у меня происходит:

1. В Лотусе юзверь заполняет формочку, сохраняет, нажимает кнопку Отправить
2. По кнопке методом runOnServer запускается агент, который получает в качестве параметра noteID нужного (текущего для пользователя) документа. Далее агент:
3. Выгружает документ в dxl
4. Получает dxl от DXLexporter'а as String
5. Подает на вход java-трансформеру дхл и xsl тоже as String, взятый из РТ-поля соответствующего документа (хранится в той же базе в скрытой вьюхе)
6. В xsl-документе идет ссылка на dictionary.xml - для каждой строчки в dictionary нужно в выходном документе создать элемент с именем, указанным в dictionary как value, и положить в этот элемент реальное значение из соответствующего поля в лотусе. То есть каждая строчка словаря имеет такую структуру:
<item dxlName="имя_соответствующего_поля_в_лотусе">имя_создаваемого_в_выходном_документе_элемента</item>. В создаваемые в выходном документе элементы должны быть положены нужные значения.
7. Отправляет это наружу.

Соответствие всегда 1 к 1. В принципе просто мапим одни айтемы к другим, да. Часть полей в лотусе не мапится ни во что, игнорируется, но все элементы, создаваемые при трансформации, обязательно опираются на один и только один тег в дхл (ну кроме тех, что прописаны въявную в xsl типа логин-пароль и т.п.)

Кусок дхл:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">DXL</div></div><div class="sp-body"><div class="sp-content">
<?xml version='1.0' ?>
<document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='3.4'
replicaid='442579FC002D81C6' form='creditClaimEQUI'>
<noteinfo noteid='116ba' unid='3AD7DE88545654C744257BA5004005A0' sequence='1'>
<created><datetime>20130711T153917,44+04</datetime></created>
<modified><datetime>20130711T153917,45+04</datetime></modified>
<revised><datetime>20130711T153917,44+04</datetime></revised>
<lastaccessed><datetime>20130711T153917,44+04</datetime></lastaccessed>
<addedtofile><datetime>20130711T153917,44+04</datetime></addedtofile></noteinfo>
<item name='currencyGiven'><text>р.</text></item>
<item name='productCode'><number>4</number></item>
<item name='clientCategory'><text>2</text></item>
<item name='product_type'><text>5</text></item>
<item name='DeclaredSumm'><number>500000</number></item>
<item name='Currency'><text>810</text></item>
<item name='exchange'><number>1</number></item>
<item name='CreditPeriod'><number>50</number></item>
<item name='Percent'><number>20</number></item>
<item name='dayPercent'><text>0.1</text></item>
<item name='CreditProvision'><text>Залог недвижимого имущества</text></item>
<item name='ensuringCode'><text>3</text></item>
<item name='collateralexistence'><text>1</text></item>
<item name='CreditAim'><text>Личные цели</text></item>
<item name='NewApplicant'><text>0</text></item>
<item name='CreditDate'><text/></item>
<item name='AnnuityDate'><text/></item>
<item name='contractSumm'><text/></item>
<item name='initialFeePercent'><number>0</number></item>
<item name='InitialFee'><number>0</number></item>
<item name='initialFeePercent_eq'><text>0</text></item>
<item name='initialFeePercent_def'><text>0</text></item>
<item name='DeclaredSummRub'><number>500000</number></item>
<item name='PaySource'><text/></item>
<item name='AccountNumber'><text>40817</text></item>
<item name='ContractNumber'><text/></item>
<item name='OtherBanks'><text/></item>
<item name='Inform'><text>сотрудники Банка</text></item>
<item name='DO'><text>Дополнительный офис "Строгино"</text></item>
<item name='originalchannel'><text>1</text></item>
<item name='LifeInsurance'><text>0</text></item>
<item name='doctype'><text>СНИЛС</text></item>
<item name='ElseSecondDoc'><text/></item>
<item name='pfr'><text>12345678901</text></item>
<item name='driverno'><text>EMPTY</text></item>
<item name='SecondIssuer'><text>ПФР</text></item>
<item name='SecondSerial'><text/></item>
<item name='SecondNumber'><text>12345678901</text></item>
<item name='SecondIssued'><datetime>20000101</datetime></item>
<item name='SecondIssuedEQ'><text>01.01.2000</text></item>
<item name='HomePhoneReg'><number>984957775522</number></item>
<item name='TimeSince'><text/></item>
<item name='TimeTill'><text/></item>
<item name='homePhoneReg_eq'><text>84957775522</text></item>
<item name='homePhoneReg_def'><text>EMPTY</text></item>
<item name='HomePhoneFact'><number>984955557744</number></item>
<item name='TimeSince_1'><text/></item>
<item name='TimeTill_1'><text/></item>
<item name='homephonefact_eq'><text>84955557744</text></item>
<item name='homePhoneFact_def'><text>EMPTY</text></item>
<item name='CellPhone_1'><number>989165551122</number></item>
<item name='TimeSince_2'><text/></item>
<item name='TimeTill_2'><text/></item>
<item name='mobilephone'><text>89165551122</text></item>
<item name='mobilePhone_def'><text>EMPTY</text></item>
<item name='WorkPhone_1'><text/></item>
<item name='ElsePhoneFIO'><text/></item>
<item name='WorkPhone_2'><text/></item>
<item name='ElsePhoneFIO_1'><text/></item>
<item name='Email'><text>e.v.kondratova@mail.ru</text></item>
<item name='email_eq'><text>e.v.kondratova@mail.ru</text></item>
<item name='email_def'><text>EMPTY</text></item>
<item name='INN'><number>111222333444</number></item>
<item name='innEQ'><text>111222333444</text></item>
<item name='inn_def'><text>EMPTY</text></item>
<item name='EmployerIsCl'><text>Да</text></item>
<item name='registration'><text>1</text></item>
<item name='tempRegSDate'><text/></item>
<item name='tempRegEDate'><text/></item>
<item name='tempRegMonths'><number>999</number></item>
<item name='ZipCodeReg'><text>000000</text></item>
<item name='zipCodeReg_eq'><text>000000</text></item>
<item name='zipCodeReg_def'><text>000000</text></item>
<item name='RegDateReg'><datetime>19000101</datetime></item>
<item name='RFReg'><text>РФ</text></item>
<item name='CountryReg'><text/></item>
<item name='CountryRegEQ'><text>RU</text></item>
<item name='RegionReg'><text>МОСКВА</text></item>
<item name='RegionRegCode_eq'><text>45</text></item>
<item name='RegionRegName_eq'><text>МОСКВА</text></item>
<item name='DistrictReg'><text>Москва</text></item>
<item name='districtReg_eq'><text>Москва</text></item>
<item name='districtReg_def'><text>EMPTY</text></item>
<item name='CityReg'><text>Москва</text></item>
<item name='StreetReg'><text>улица</text></item>
<item name='HouseReg'><text>1</text></item>
<item name='BuildingReg'><text>1</text></item>
<item name='buildingReg_eq'><text>1</text></item>
<item name='buildingReg_def'><text>EMPTY</text></item>
<item name='StructureReg'><text>1</text></item>
<item name='structureReg_eq'><text>1</text></item>
<item name='structureReg_def'><text>EMPTY</text></item>
<item name='RoomReg'><number>1</number></item>
<item name='roomReg_eq'><text>1</text></item>
<item name='roomReg_def'><text>EMPTY</text></item>
<item name='YYYY'><number>20</number></item>
<item name='Month'><number>0</number></item>
<item name='StatusHomeReg'><text/></item>
<item name='ElseHomeReg'><text/></item>
<item name='CoincidenceAddress'><text>1</text></item>
<item name='ZipCodeFact'><text>000000</text></item>
<item name='zipCodeFact_eq'><text>000000</text></item>
<item name='zipCodeFact_def'><text>000000</text></item>
<item name='RFFact'><text>РФ</text></item>
<item name='CountryFact'><text/></item>
<item name='CountryFactEQ'><text>RU</text></item>
<item name='RegionFact'><text>МОСКВА</text></item>
<item name='RegionFactCode_eq'><text>45</text></item>
<item name='RegionFactName_eq'><text>МОСКВА</text></item>
<item name='DistrictFact'><text>Москва</text></item>
<item name='districtFact_eq'><text>Москва</text></item>
<item name='districtFact_def'><text>EMPTY</text></item>
<item name='CityFact'><text>Москва</text></item>
<item name='StreetFact'><text>улица</text></item>
<item name='HouseFact'><text>1</text></item>
<item name='BuildingFact'><text>1</text></item>
<item name='buildingFact_eq'><text>1</text></item>
<item name='buildingFact_def'><text>EMPTY</text></item>
<item name='StructureFact'><text>1</text></item>
<item name='structureFact_eq'><text>1</text></item>
<item name='structureFact_def'><text>EMPTY</text></item>
<item name='RoomFact'><text>1</text></item>
<item name='roomFact_eq'><text>1</text></item>
<item name='roomFact_def'><text>EMPTY</text></item>
<item name='DateFact'><datetime>19000101</datetime></item>
<item name='dateFact_eq'><text>01.01.1900</text></item>
<item name='dateFact_def'><text>01.01.1900</text></item>
<item name='YYYY_1'><number>20</number></item>
<item name='Month_1'><number>0</number></item>
<item name='YYYY_1_eq'><text>20</text></item>
<item name='YYYY_1_def'><text>EMPTY</text></item>
<item name='month_1_eq'><text>0</text></item>
<item name='month_1_def'><text>EMPTY</text></item>
<item name='StatusHomeFact'><text>1</text></item>
<item name='ElseHomeFact'><text/></item>
<item name='MaritalStatus'><text>0</text></item>
<item name='marital'><text>0</text></item>
<item name='marital_def'><text>9</text></item>
<item name='CountOfMembers'><number>1</number></item>
<item name='numchildren'><number>0</number></item>
<item name='RelationDegree'><text/></item>
<item name='FIORelativ'><text/></item>
<item name='BirthDay'><text/></item>
<item name='DependencyYN'><text>Нет</text></item>
<item name='RelationDegree_1'><text/></item>
<item name='FIORelativ_1'><text/></item>
<item name='BirthDay_1'><text/></item>
<item name='DependencyYN_1'><text>Нет</text></item>
<item name='RelationDegree_1_1'><text/></item>
<item name='FIORelativ_1_1'><text/></item>
<item name='BirthDay_1_1'><text/></item>
<item name='DependencyYN_1_1'><text>Нет</text></item>
<item name='RelationDegree_2'><text/></item>
<item name='FIORelativ_2'><text/></item>
<item name='BirthDay_2'><text/></item>
<item name='DependencyYN_2'><text>Нет</text></item>
<item name='RelationDegree_2_1'><text/></item>
<item name='FIORelativ_2_1'><text/></item>
<item name='BirthDay_2_1'><text/></item>
<item name='DependencyYN_2_1'><text>Нет</text></item>
<item name='RelationDegree_3'><text/></item>
<item name='FIORelativ_3'><text/></item>
<item name='BirthDay_3'><text/></item>
<item name='DependencyYN_3'><text>Нет</text></item>
<item name='RelationDegree_3_1'><text/></item>
<item name='FIORelativ_3_1'><text/></item>
<item name='BirthDay_3_1'><text/></item>
<item name='DependencyYN_3_1'><text>Нет</text></item>
<item name='RelationDegree_4'><text/></item>
<item name='ElseRelationDegree'><text/></item>
<item name='FIORelativ_4'><text/></item>
<item name='BirthDay_4'><text/></item>
<item name='DependencyYN_4'><text>Нет</text></item>
<item name='Dependants'><number>0</number></item>
<item name='Education'><text>4</text></item>
<item name='education_eq'><text>4</text></item>
<item name='education_def'><text>9</text></item>
<item name='currentemployment'><text>1</text></item>
<item name='Occupation'><text>0</text></item>
<item name='ClientDomain'><text>Техническое обеспечение и телекоммуникации</text></item>
<item name='WorkingPeriod_Domain'><text>От 3 до 5 лет</text></item>
<item name='WorkingPeriod_Company'><text>2-0</text></item>
<item name='employment_year_all'><text>4.2</text></item>
<item name='office_def'><text>EMPTY</text></item>
<item name='Mail'><text/></item>
<item name='FaxNumber'><text/></item>
<item name='Site'><text>http://</text></item>
<item name='stateCompany'><text>0</text></item>
<item name='stateCompany_eq'><text>0</text></item>
<item name='stateCompany_def'><text>9</text></item>
<item name='ForeignInvest'><text>Без участия</text></item>
<item name='CompanySector'><text>Финансовое дело и страхование</text></item>
<item name='ElseSector'><text/></item>
<item name='businessIndustry_eq'><text>6</text></item>
<item name='PositionChoise'><text>03</text></item>
<item name='profession_eq'><text>03</text></item>
<item name='profession_def'><text>99</text></item>
<item name='Position'><text>Начальник отдела</text></item>
<item name='position_eq'><text>Начальник отдела</text></item>
<item name='position_def'><text>EMPTY</text></item>
<item name='Responsibility'><text/></item>
<item name='employersize'><text>99</text></item>
<item name='employment_year'><text>2</text></item>
<item name='employment_month'><text>0</text></item>
<item name='employment_inn'><text>EMPTY</text></item>
<item name='employmentDate'><text>01.01.1900</text></item>
<item name='CriminalResp'><text>0</text></item>
<item name='PastDue'><text>0</text></item>
<item name='CourtYN'><text>0</text></item>
<item name='PunishmentYN'><text>0</text></item>
<item name='CrazyYN'><text>0</text></item>
<item name='IncompetentYN'><text>0</text></item>
<item name='InvalidYN'><text>0</text></item>
<item name='Military'><text>не военнообязанный</text></item>
<item name='ElseMilitary'><text/></item>
<item name='PublicRelYN'><text>0</text></item>
<item name='AgreeBKI_YN'><text>1</text></item>
<item name='AgreePdN_YN'><text>1</text></item>
<item name='collateralvalue'><text>0</text></item>
<item name='purchaseexistence'><text>99</text></item>
<item name='purchasevalue'><text>0</text></item>
<item name='purchasemodel'><text>NULL</text></item>
<item name='pos_code'><text>1</text></item>
<item name='pos_phone'><text>EMPTY</text></item>
<item name='pos_country'><text>99</text></item>
<item name='pos_index'><text>EMPTY</text></item>
<item name='pos_region'><text>EMPTY</text></item>
<item name='pos_district'><text>EMPTY</text></item>
<item name='pos_city'><text>EMPTY</text></item>
<item name='pos_settlement'><text>EMPTY</text></item>
<item name='pos_street'><text>EMPTY</text></item>
<item name='pos_house'><text>EMPTY</text></item>
<item name='pos_building'><text>EMPTY</text></item>
<item name='pos_structure'><text>EMPTY</text></item>
<item name='Rate'><number>20</number></item></document>

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Результат</div></div><div class="sp-body"><div class="sp-content">
<?xml version="1.0" encoding="utf-8"?>
<ApplicationFile xmlns:l="http://www.lotus.com/dxl">
<get_status>0</get_status>
<applicationid/>
<applicationdate/>
<ApplicationsList>
<login>fff</login>
<password>ggggg</password>
<partnerid>IPB</partnerid>
<lastname/>
<firstname/>
<middlename/>
<pastlastname/>
<birthday/>
<birthplace/>
<type_of_borrower/>
<life_insurance/>
<doctype/>
<docno/>
<docplace/>
<docdate/>
<doccode/>
<pastdoctype/>
<pastdocno/>
<pastdocplace/>
<pastdocdate/>
<sex/>
<citizenship/>
<inn/>
<pfr/>
<driverno/>
<education/>
<marital/>
<numchildren/>
<email/>
<homephone/>
<mobilephone/>
<pos_index/>
<pos_region/>
<pos_district/>
<pos_city/>
<pos_settlement/>
<pos_street/>
<pos_house/>
<pos_building/>
<pos_structure/>
<pos_apartment/>
<consent/>
<consentdate/>
<consent_pd/>
<criminal_response/>
<psychoneurological/>
<uncapable/>
<newapplicant/>
<responseisneeded/>
<applicationstatus/>
<applicantid/>
<tradedate/>
<initialsumlimit/>
<initialsumcurrency/>
<applicationfraudstatus/>
<defaultstatus/>
<type>1</type>
<bki_list>equ;nbk;exp</bki_list>
</ApplicationsList>
</ApplicationFile>


Дхл и результат я порезала, но несинхронно, так что на это не обращайте внимание. Главное что теги в результате пустые + ненужный неймспейс...
 
вместо словаря конструкция типа (надо проверять):
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ldn="http://www.lotus.com/dxl" exclude-result-prefixes="ldn">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<!-- ================= -->
<!-- omit other nodes -->
<!-- ================= -->
<xsl:template match="ldn:document/*[name()!='item']"/>

<!-- ========================= -->
<!-- root element: document -->
<!-- ========================= -->
<xsl:template match="ldn:document">
<!-- создание рутового элемента - от контекста (я не знаю стр-ры валидного выходного дока) -->
....................
<xsl:apply-templates select="ldn:item"/>
........................
</xsl:template>

и вариант для хсл 1.0+
<!-- ========================= -->
<!-- child element: item -->
<!-- ========================= -->
<xsl:template match="ldn:item">
<xsl:if test="@name='mobilephone'">
<mobilephone><xsl:value-of select="." /></mobilephone>
</xsl:if>
</xsl:template>

и для 2.0+
<xsl:template match="ldn:item[@name='mobilephone']">
<mobilephone><xsl:value-of select="." /></mobilephone>
</xsl:template>

ну и закрываем шаблон, КМК - всё

Добавлено: шаблон для чайлда "продублировать" для всех имён кот. определены в словаре

Добавлено: исходя из <xsl:template match="ldn:document/*[name()!='item']"/> - уже можно брать второй вариант (либо править данный участок)
 
проверил на вашем дхл, результат:
Код:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationFile>
<mobilephone>89165551122</mobilephone>
</ApplicationFile>
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"xslt"</div></div><div class="sp-body"><div class="sp-content">
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
exclude-result-prefixes="ldn"
version="1.0"
xmlns:ldn="http://www.lotus.com/dxl">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<!-- ================= -->
<!-- omit other nodes -->
<!-- ================= -->
<xsl:template match="ldn:document/*[name()!='item']"/>

<!-- ========================= -->
<!-- root element: document -->
<!-- ========================= -->
<xsl:template match="ldn:document">
<!-- создание рутового элемента - от контекста (я не знаю стр-ры валидного выходного дока) -->
<ApplicationFile>
<xsl:apply-templates select="ldn:item"/>
</ApplicationFile>
</xsl:template>
<!-- ========================= -->
<!-- child element: item -->
<!-- ========================= -->
<xsl:template match="ldn:item">
<xsl:if test="@name='mobilephone'">
<mobilephone><xsl:value-of select="." /></mobilephone>
</xsl:if>
</xsl:template>
<!--
<xsl:template match="ldn:item[@name='mobilephone']">
<mobilephone><xsl:value-of select="." /></mobilephone>
</xsl:template>
<xsl:template match="ldn:item[@name!='mobilephone']"/>
-->
</xsl:stylesheet>

Добавлено: вариант <xsl:template match="ldn:item[@name='mobilephone']"> не понра - надо явно истр*цензура*ть несовпадающие ноды

Добавлено: странная здесь цензура
 
А трансформацию, юзающую файл, никак нельзя натравить на лотусовый неймспейс? Мне, если честно, не очень нравится идея дублировать код для каждого нужного элемента... Идея вынести мепинг тегов в отдельный подключаемый файл как раз и родилась из желания разнести код (а-ля функция в цикле) и словарь (а-ля массив, по которому бегает цикл)...
 
самое интересное в этой истории, что источником "проблем" является xml файл, существование кот. мало оправдано и попытки генерить из него ноды и приводят к нежелательным эффектам
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!