Преобразование XML Schema в JSON список массивов в Biztalk - PullRequest
0 голосов
/ 14 апреля 2020

Я определил xml схему ниже

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">
    <xs:element name="Root">
        <xs:complexType>
            <xs:all>
                <xs:element name="bblist">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="item" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>

Я хочу сгенерировать Json ниже с использованием конвейера.

{
    "bblist":
    [
        "13403"

    ]
}

, но конвейер BizTalk преобразует его в

{"bblist": "13403"}

Просто интересно, правильна ли моя схема. Я определяю xsd для генерации Json массивов правильно?

1 Ответ

0 голосов
/ 17 апреля 2020

Существует три проблемы с вашей схемой XSD

  1. Вы не определили целевое пространство имен. Это означает, что когда он проходит через XML Receive, он устанавливает MessageType в набор значений по умолчанию, который не ссылается на схему. Это означает, что он может не знать, какую схему использовать в JSON Encoder.

MessageType Root Promoted http://schemas.microsoft.com/BizTalk/2003/system-properties

Вы использовали <xs:all> вместо <xs:sequence> в определении схемы. То, что кодировщик JSON не обрабатывает.

Если вы определите свою схему как

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://bblist" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" targetNamespace="http://bblist" vc:minVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" name="bblist">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="1" maxOccurs="unbounded" name="item" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

с полезной нагрузкой

<ns0:Root xmlns:ns0="http://bblist">
  <bblist>
    <item>item_0</item>
  </bblist>
</ns0:Root>

You получите вывод

{
  "bblist": {
    "item": [
      "item_0"
    ]
  }
}

Это ближе к вашему ожидаемому JSON, с его созданием массива повторяющихся элементов.

Ваша структура неверна для JSON, который вы ожидаете, поскольку у вас есть повторение для элемента, а не для блиста.

Если вы определяете свою схему как

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://bblist" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" targetNamespace="http://bblist" vc:minVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="unbounded" name="blist" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XML равно

<ns0:Root xmlns:ns0="http://bblist">
  <blist>blist_0</blist>
</ns0:Root>

JSON равно

{
  "blist": [
    "blist_0"
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...