|
Упростить xslt
|
|||
---|---|---|---|
#18+
Как можно упростить 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> ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:55 |
|
Упростить xslt
|
|||
---|---|---|---|
#18+
Отформатированный код Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 17:37 |
|
Упростить xslt
|
|||
---|---|---|---|
#18+
_Vasilisk_, у меня не в этом был вопрос. в код добавлены блоки <xsl:if test="rdc:Item/rdc:Value[@Name='vin']!=''"> </xsl:if> Они многократно повторяются. И у Вас в отформатированном повторяются. Вопрос в том, как задать шаблон, чтобы избежать этих многократных повторов. Каждый атомарный тег (фамилия, имя, отчество, дата рождения, инн, Vin) - общий принцип: если передано пустое значение, то не выводить этот тег. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 09:27 |
|
Упростить xslt
|
|||
---|---|---|---|
#18+
Код: xml 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 15:01 |
|
Упростить xslt
|
|||
---|---|---|---|
#18+
_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.' } }"; ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 10:21 |
|
|
start [/forum/topic.php?fid=14&msg=39889675&tid=1331898]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
1531ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 1940ms |
0 / 0 |