powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Упростить xslt
6 сообщений из 6, страница 1 из 1
Упростить xslt
    #39889675
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно упростить xslt?
Многократные повторы <xsl:if>...</xsl:if> заменить на какую-то одну конструкцию, так чтобы если в тегах с inn, vin, lastName, middleName, firstName, birthDate не передано ничего, то соответствующий тег просто не формируется в результирующем xml?

Спасибо!


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl=" http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/"
xmlns:rdc=" http://www.netvoxlab.ru/SmevRdcService"
xmlns:cmn="urn://services-gibdd-ru/carservice/commons/1.0.0"
xmlns:rt="urn://services-gibdd-ru/carservice/root/1.0.0"
exclude-result-prefixes="soapenv rdc" >
<xsl:output encoding="UTF-8" method="xml"/>

<xsl:template match="/soapenv:Envelope">
<rt:carRegistrationsRequest>
<xsl:apply-templates select="soapenv:Body/rdc:SendRequest"/>
</rt:carRegistrationsRequest>
</xsl:template>
<xsl:template match="rdc:SendRequest">
<xsl:choose>
<xsl:when test="rdc:Item[rdc:Value/@Name='vin']">
<rt:carCriteria>
<xsl:if test="rdc:Item/rdc:Value[@Name='vin']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value"/>
</xsl:if>
</rt:carCriteria>
</xsl:when>
<xsl:when test="rdc:Item[rdc:Value/@Name='inn']">
<rt:organizationCriteria>
<xsl:if test="rdc:Item/rdc:Value[@Name='inn']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value"/>
</xsl:if>
</rt:organizationCriteria>
</xsl:when>
<xsl:when test="rdc:Item[rdc:Value/@Name='lastName']">
<rt:personCriteria>
<xsl:if test="rdc:Item/rdc:Value[@Name='firstName']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value[@Name='firstName']"/>
</xsl:if>
<xsl:if test="rdc:Item/rdc:Value[@Name='lastName']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value[@Name='lastName']"/>
</xsl:if>
<xsl:if test="rdc:Item/rdc:Value[@Name='middleName']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value[@Name='middleName']"/>
</xsl:if>
<xsl:if test="rdc:Item/rdc:Value[@Name='birthDate']!=''">
<xsl:apply-templates select="rdc:Item/rdc:Value[@Name='birthDate']"/>
</xsl:if>
</rt:personCriteria>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="rdc:Value">
<xsl:element name="{concat('cmn:', @Name)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Примеры входящих xml:
<soapenv:Envelope xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<SendRequest xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<ServiceCode>smev3GIBDDInfo</ServiceCode>
<Value Name="TestMessage">true</Value>
<Item Name="request" xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<Value Name="lastName">ИВАНОВ</Value>
<Value Name="firstName">СЕРГЕЙ</Value>
<Value Name="middleName">НИКОЛАЕВИЧ</Value>
<Value Name="birthDate">1972-08-15</Value>
</Item>
</SendRequest>
</soapenv:Body>
</soapenv:Envelope>


<soapenv:Envelope xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<SendRequest xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<ServiceCode>smev3GIBDDInfo</ServiceCode>
<Value Name="TestMessage">true</Value>
<Item Name="request" xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<Value Name="vin">2L1FK81W7YX914837</Value>
</Item>
</SendRequest>
</soapenv:Body>
</soapenv:Envelope>
...
Рейтинг: 0 / 0
Упростить xslt
    #39889871
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отформатированный код
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:rdc="http://www.netvoxlab.ru/SmevRdcService"
  xmlns:cmn="urn://services-gibdd-ru/carservice/commons/1.0.0"
  xmlns:rt="urn://services-gibdd-ru/carservice/root/1.0.0"
  exclude-result-prefixes="soapenv rdc"  >
  <xsl:output encoding="UTF-8" method="xml"/>
  
  <xsl:template match="/soapenv:Envelope">
    <rt:carRegistrationsRequest>
      <xsl:apply-templates select="soapenv:Body/rdc:SendRequest"/>
    </rt:carRegistrationsRequest>
  </xsl:template>
  <xsl:template match="rdc:SendRequest">
    <xsl:choose>
      <xsl:when test="rdc:Item[rdc:Value/@Name='vin']">
        <rt:carCriteria>
          <xsl:if test="rdc:Item/rdc:Value[@Name='vin']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value"/>
          </xsl:if>
        </rt:carCriteria>
      </xsl:when>
      <xsl:when test="rdc:Item[rdc:Value/@Name='inn']">
        <rt:organizationCriteria>
          <xsl:if test="rdc:Item/rdc:Value[@Name='inn']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value"/>
          </xsl:if>
        </rt:organizationCriteria>
      </xsl:when>
      <xsl:when test="rdc:Item[rdc:Value/@Name='lastName']">
        <rt:personCriteria>
          <xsl:if test="rdc:Item/rdc:Value[@Name='firstName']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value[@Name='firstName']"/>
          </xsl:if>
          <xsl:if test="rdc:Item/rdc:Value[@Name='lastName']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value[@Name='lastName']"/>
          </xsl:if>
          <xsl:if test="rdc:Item/rdc:Value[@Name='middleName']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value[@Name='middleName']"/>
          </xsl:if>
          <xsl:if test="rdc:Item/rdc:Value[@Name='birthDate']!=''">
            <xsl:apply-templates select="rdc:Item/rdc:Value[@Name='birthDate']"/>
          </xsl:if>
        </rt:personCriteria>
      </xsl:when>
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <xsl:template match="rdc:Value">
    <xsl:element name="{concat('cmn:', @Name)}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

...
Рейтинг: 0 / 0
Упростить xslt
    #39889873
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же вам писал как нужно здесь 21997550 и здесь 22007277 . Вы решили наваять свой велосипед?
...
Рейтинг: 0 / 0
Упростить xslt
    #39890307
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
у меня не в этом был вопрос.
в код добавлены блоки
<xsl:if test="rdc:Item/rdc:Value[@Name='vin']!=''">
</xsl:if>

Они многократно повторяются.
И у Вас в отформатированном повторяются.
Вопрос в том, как задать шаблон, чтобы избежать этих многократных повторов.
Каждый атомарный тег (фамилия, имя, отчество, дата рождения, инн, Vin) - общий принцип: если передано пустое значение, то не выводить этот тег.
Спасибо!
...
Рейтинг: 0 / 0
Упростить xslt
    #39890546
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="rdc:Value">
  <xsl:if test=". != ''">
    <xsl:element name="{concat('cmn:', @Name)}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:if>
</xsl:template>
...
Рейтинг: 0 / 0
Упростить xslt
    #39923219
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Как можно данный xml конвертировать в json (используя c# - asp.net) так чтобы в json не было тега <Value Name="birthDate">1972-08-15</Value>, а теги с именем, фамилией, отчеством назывались Имя, Фамилия, Отчество?

<soapenv:Envelope xmlns:soapenv=" http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<SendRequest xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<ServiceCode>smev3GIBDDInfo</ServiceCode>
<Value Name="TestMessage">true</Value>
<Item Name="request" xmlns=" http://www.netvoxlab.ru/SmevRdcService">
<Value Name="lastName">ИВАНОВ</Value>
<Value Name="firstName">СЕРГЕЙ</Value>
<Value Name="middleName">НИКОЛАЕВИЧ</Value>
<Value Name="birthDate">1972-08-15</Value>
</Item>
</SendRequest>
</soapenv:Body>
</soapenv:Envelope>



Как можно данный json конвертировать в xml (используя c# - asp.net), чтобы в xml содержалось только 2 тега - Email и Team. Team переименовать в Dpt. И вывести не все подтеги в Dpt, а только один из них - Team.Name.

string json = @"{
'@Id': 1,
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
],
'Team': {
'@Id': 2,
'Name': 'Software Developers',
'Description': 'Creators of fine software products and services.'
}
}";
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Упростить xslt
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]