Потяните вложенный тег в цикл For в XSLT

Я должен получить информацию о каждом партийном сайте-> городе и штате и объединить их в одну строку. В этом я пытаюсь зациклиться, но он подтягивает одну первую итерацию дочернего элемента XML. Нужна помощь в объединении всех значений города и штата в переменную. Мне нужно предложение вытащить тег и сохранить в переменной тоже.

Мне нужно сохранить переменную типа "Quispamsis,NB,#Edmonton,AB"

    ```XMLCode


<env:Envelope xmlns:env = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa = "http://www.w3.org/2005/08/addressing" xmlns:typ = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule/types/">
   <env:Header>
      <wsa:Action>http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule//OrganizationService/getOrganizationResponse</wsa:Action>
      <wsa:MessageID>urn:uuid:fb4115fd-ca76-4cec-9bac-a437fde6b7d5</wsa:MessageID>
   </env:Header>
   <env:Body>
      <ns0:getOrganizationResponse xmlns:ns0 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule/types/">
         <ns3:result xsi:type = "ns2:OrganizationParty" xmlns:ns2 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/" xmlns:ns1 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/partyService/" xmlns:ns3 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule/types/" xmlns:ns0 = "http://xmlns.oracle.com/adf/svc/types/" xmlns:ns5 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/contactPointService/" xmlns:ns8 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/relationshipService/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
            <ns2:PartyNumber>CDRM_1167</ns2:PartyNumber>
            <ns2:PartySite xmlns:ns7 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/flex/partySite/">
               <ns1:PartySiteId>300000012822376</ns1:PartySiteId>
               <ns1:PartyId>300000012822366</ns1:PartyId>


               <ns1:Country>CA</ns1:Country>

               <ns1:City>Quispamsis</ns1:City>
               <ns1:PostalCode>56987</ns1:PostalCode>
               <ns1:State>NB</ns1:State>

          </ns2:PartySite>
          <ns2:PartySite xmlns:ns7 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/flex/partySite/">
               <ns1:City>Edmonton</ns1:City>
               <ns1:PostalCode xsi:nil = "true"/>
               <ns1:State>AB</ns1:State>
            </ns2:PartySite>
 </ns3:result>
      </ns0:getOrganizationResponse>
   </env:Body>
</env:Envelope>
```

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:sb1 = "urn:crmondemand/ws/account/10/2004" 
xmlns:env = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule/types/" 
xmlns:ns1 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/partyService/" xmlns:ns2 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/" xmlns:ns3 = "http://xmlns.oracle.com/apps/cdm/foundation/parties/organizationService/applicationModule/types/" version = "1.0">



<xsl:template match = "/">
<xsl:variable name = "main_doc" select = "/env:Envelope/env:Body/ns0:getOrganizationResponse/ns3:result"/>
<xsl:variable name = "site">
    <xsl:for-each select = "$main_doc/ns2:PartySite">
        <xsl:choose>
            <xsl:when test = "position() = 1">
                <xsl:value-of select = "concat(./ns1:City,',',./ns1:State)"/>
            </xsl:when>
            <xsl:otherwise>
                ;<xsl:value-of select = "concat(./ns1:City,',',./ns1:State)"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
</xsl:variable>
<html> 
<body>
  <h2>My CD Collection</h2>
  <table border = "1">
    <tr bgcolor = "#9acd32">
      <th style = "text-align:left">Title</th>
      <th style = "text-align:left">Artist</th>
    </tr>
<xsl:for-each select = "$main_doc">

   <tr>
      <td><xsl:value-of select = "$main_doc/ns2:PartyId"/></td>
      <td><xsl:value-of select = "concat($main_doc/ns2:PartyName,',', $main_doc/ns2:PartyNumber)"/></td>
        <td><xsl:value-of select = "$site"/></td>
<xsl:for-each select = "./ns2:PartySite">

          <td><xsl:value-of select = "./ns1:City"/></td>

</xsl:for-each>
   </tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Не могли бы вы отредактировать свой вопрос, чтобы показать результат, который вы ожидаете в этом случае? Спасибо!

Tim C 17.05.2019 10:18

мне нужно, чтобы подобное сохранялось в переменной Quispamsis,NB,#Edmonton,AB

Sagar Pahlajani 17.05.2019 10:20

<xsl:variable name = "main_doc" select = "/env:Envelope/env:Body/ns0:getOrganizationResponse/n‌​s3:result"/> <xsl:variable name = "site"> <xsl:for-each select = "$main_doc/ns2:PartySite"> <xsl:choose> <xsl:when test = "position() = 1"> <xsl:value-of select = "concat(./ns1:City,',', ns1:State)"/> </xsl:when> <xsl:inotherwise> ;<xsl:value-of select = "concat(./ns1:City,',',ns1:State)"/> </xsl :иначе> </xsl:выбрать> </xsl:для-каждого> </xsl:переменная>

Sagar Pahlajani 17.05.2019 10:23

Я тоже пробовал это, но брал только первые значения дерева PartySite

Sagar Pahlajani 17.05.2019 10:24

@Tim C: посмотрите комментарии выше

Sagar Pahlajani 17.05.2019 10:25

Можете ли вы указать ожидаемые результаты в самом вопросе, так как код трудно читать в комментариях. Спасибо!

Tim C 17.05.2019 10:28

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

Vebbie 17.05.2019 10:34

@Вебби: не работает

Sagar Pahlajani 17.05.2019 14:15

@TimC добавил в вопрос

Sagar Pahlajani 17.05.2019 14:15

Вы говорите о переменной site? Вы хотите, чтобы эта переменная содержала текст «Quispamsis,NB,#Edmonton,AB»?

Tim C 17.05.2019 14:23

@TimC: Да, я хочу этого добиться

Sagar Pahlajani 17.05.2019 15:30

@TimC: не работает

Sagar Pahlajani 17.05.2019 16:26

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

Tim C 17.05.2019 16:28

@TimC: видел, что ваш xsltfiddle.liberty-development.net/pPzifpQ, кажется, работает здесь, но когда я пытался использовать редактор w3school xslt, он не отображался. Спасибо за помощь и быстрое решение

Sagar Pahlajani 17.05.2019 16:39

@TimC: вы можете снова поставить свой ответ, я отмечу да как ответ

Sagar Pahlajani 17.05.2019 16:45

Я восстановил свой ответ. Я рекомендую использовать xsltfiddle.liberty-development.net для тестирования любого XSLT, а не W3Schools (не в последнюю очередь потому, что W3Schools поддерживает только XSLT 1.0).

Tim C 17.05.2019 16:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
16
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите, чтобы ваша переменная site содержала текст Quispamsis,NB,#Edmonton,AB, вы можете просто сделать это....

<xsl:variable name = "site">
    <xsl:for-each select = "$main_doc/ns2:PartySite">
        <xsl:if test = "position() > 1">,#</xsl:if>
        <xsl:value-of select = "concat(./ns1:City,',',./ns1:State)"/>
    </xsl:for-each>
</xsl:variable>

Нет, все равно он остается таким же, он дает мне только первое значение как Quispamsis, NB, а не второе.

Sagar Pahlajani 17.05.2019 16:23

Я протестировал это здесь, и это работает для меня; xsltfiddle.liberty-development.net/pPzifpQ

Tim C 17.05.2019 16:25

Другие вопросы по теме