Xquery для вложенной полезной нагрузки xml - PullRequest
0 голосов
/ 14 сентября 2018

Вот мой входной XML:

Это мои измененные данные XML в качестве ввода

 <Input>
    <BIKey></BIKey>
    <BusinessObjects>
          <BusinessObject>
            <BusinessIdentifiers>
              <BusinessIdentifier>
                <BKey>BuCode</BKey>
                <BValue>CDC</BValue>
              </BusinessIdentifier>
              <BusinessIdentifier>
                <BKey>BuType</BKey>
                <BValue>123</BValue>
              </BusinessIdentifier>
              <BusinessIdentifier>
                <BKey>CsmNo</BKey>
                <BValue>857895</BValue>
              </BusinessIdentifier>
            </BusinessIdentifiers>
            <BusinessAttributes>
              <BusinessAttribute>
                <BKey>Version</BKey>
                <BValue>1</BValue> 
              </BusinessAttribute>
              <BusinessAttribute>
                <BKey>date</BKey>
                <BValue>2018-06-28</BValue>
              </BusinessAttribute>
            </BusinessAttributes>
          </BusinessObject>
          <BusinessObject>
            <BusinessIdentifiers>
              <BusinessIdentifier>
                <BKey>BuCode</BKey>
                <BValue>CDC</BValue>
              </BusinessIdentifier>
              <BusinessIdentifier>
                <BKey>BuType</BKey>
                <BValue>123</BValue>
              </BusinessIdentifier>
              <BusinessIdentifier>
                <BKey>CsmNo</BKey>
                <BValue>34567</BValue>
              </BusinessIdentifier>
            </BusinessIdentifiers>
            <BusinessAttributes>
              <BusinessAttribute>
                <BKey>Version</BKey>
                <BValue>1</BValue> 
              </BusinessAttribute>
              <BusinessAttribute>
                <BKey>date</BKey>
                <BValue>2018-06-28</BValue>
              </BusinessAttribute>
            </BusinessAttributes>
          </BusinessObject>      
        </BusinessObjects>
        </Input>

Я хотел бы получить следующий вывод CDC|123|857895:CDC|123|34567, присвоенный <BIKey>

Я пробовал этот Xquery по предложению Мартина, который фактически исправил мою проблему с ealrier, но моя inputpayload больше по сравнению с моим предыдущим вопросом:

<Input>  
    For $BusinessObject in Input/BusinessObjects/BusinessObject[1]
    retrun


      <BIKey>{ string-join(Input/BusinessObjects/BusinessObject[1]/BusinessIdentifiers/BusinessIdentifier/BValue, '|') }</BIKey>


    </Input>

Но я получил этот вывод

CDC|123|857895

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

Спасибо

1 Ответ

0 голосов
/ 14 сентября 2018

Просто дважды используйте string-join, один вызов вложен в другой:

<BIKey>
{
    string-join(
        Input/BusinessObjects/BusinessObject ! string-join(BusinessIdentifiers/BusinessIdentifier/BValue, '|'),
        ':'
    )
}
</BIKey>

Таким образом, внешний string-join объединяет последовательности строк, разделенных столбцами, которые внутренние Input/BusinessObjects/BusinessObject ! string-join(BusinessIdentifiers/BusinessIdentifier/BValue, '|') возвращают с двоеточием.

Пример на https://xqueryfiddle.liberty -development.net / eiQZDbi .

Если у вас нет XQuery 3 или более поздней версии, вы можете заменить использование ! на

<Input>
    <BIKey>
    {
        string-join(
            for $bo in Input/BusinessObjects/BusinessObject return string-join($bo/BusinessIdentifiers/BusinessIdentifier/BValue, '|'),
            ':'
        )
    }
    </BIKey>
</Input>

https://xqueryfiddle.liberty -development.net / eiQZDbi / 2

...