У нас есть входящие данные JSON из источника, которые содержат данные и столбец в одной полезной нагрузке. Используя json-to-xml в XSLT, я смог сгенерировать XML следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<boolean key="allData">true</boolean>
<map key="factMap">
<map key="T!T">
<array key="rows">
<map>
<array key="dataCells">
<map>
<string key="label">1A</string>
<string key="value">1A</string>
</map>
<map>
<string key="label">1B</string>
<string key="value">1B</string>
</map>
<map>
<string key="label">1C</string>
<string key="value">1C</string>
</map>
</array>
</map>
<map>
<array key="dataCells">
<map>
<string key="label">2A</string>
<string key="value">2A</string>
</map>
<map>
<string key="label">2B</string>
<string key="value">2B</string>
</map>
<map>
<string key="label">2C</string>
<string key="value">2C</string>
</map>
</array>
</map>
<map>
<array key="dataCells">
<map>
<string key="label">3A</string>
<string key="value">3A</string>
</map>
<map>
<string key="label">3B</string>
<string key="value">3B</string>
</map>
<map>
<string key="label">3C</string>
<string key="value">3C</string>
</map>
</array>
</map>
</array>
</map>
</map>
<map key="detailColumnInfo">
<map key="Product_vod__c.F1">
<string key="dataType">string</string>
<string key="label">F1</string>
</map>
<map key="Product_vod__c.F2">
<string key="dataType">string</string>
<string key="label">F2</string>
</map>
<map key="Product_vod__c.F3">
<string key="dataType">string</string>
<string key="label">F3</string>
</map>
</map>
</map>
Здесь каждая строка доступна под тегом dataCells как метка и значение. Значение в dataCells представляет значение поля, однако метка не представляет имя поля. Имена полей и порядок полей являются частью тега detailColumnInfo. Порядок и количество полей / данных не фиксированы, однако целевой XML должен оставаться фиксированным. Например. входящие данные могут иметь 10 полей и данные в любом порядке, однако целевой XML должен иметь только 2 поля. Чтобы реализовать это, я считаю, что во время выполнения мы должны выяснить порядок поля F1 и выбрать соответствующие данные из dataCells. Например. если F1 - это первое поле в detailColumnInfo, тогда мне нужно выбрать первое значение из всех ячеек данных (1A, 2A, 3A) и сгенерировать целевой XML со значением поля F1 и так далее.
Тег Detailcolumninfo представляет сведения о столбце. Положение поля значения в Detailcolumninfo будет определять положение полей в Datacells. Для фрагмента кода ввода, опубликованного в запросе, если F1 является 1-й меткой в Detailcolumninfo, тогда первое значение в Datacells (1A, 2A, 3A) представляет значение F1. Аналогично 1B, 2B, 3B представляют значение F2. Целевой XML должен выглядеть следующим образом:
<Root>
<Rows>
<Row>
<F1> 1A </F1>
<F2> 1B </F2>
<F3> 1C </F3>
</Row>
<Row>
<F1>2A </F1>
<F2> 2B </F2>
<F3> 2C </F3>
</Row>
<Row>
<F1>3A </F1>
<F2> 3B </F2>
<F3> 3C </F3>
</Row>
</Rows>
Can anyone suggest possible solutions to implement such dynamic mapping.
Fx
индикатор позиции? Как результат XML будет выглядеть для отправленного вами входного фрагмента? Как это будет отличаться для другого входного фрагмента? - person Martin Honnen   schedule 08.11.2017<F2> 1B </F1>
. Вы просто хотите сопоставить первыйarray key="dataCells"
с первымRow
, второй со вторымRow
, но каждый будет брать имена элементов из элементаmap key="detailColumnInfo"
? Или1
вF1
также каким-то образом является индексом для доступа к строкам? - person Martin Honnen   schedule 08.11.2017