I хочет извлечь содержимое SFDCProductList в переменную, которая является массивом. Как это сделать?
У меня есть следующий xml:
.
.
.
10000
Благодарю вас! Ваш запрос был успешно выполнен. Код PIM 10000
sgfsuifg
sjkfbksgfsudf
</SFDCProduct>
</SFDCProductList>
<SFDCProductList>
.
.
.
</SFDCProductList>
<SFDCProductList>
.
.
.
</SFDCProductList>
<TransportInformation>
.
.
.
</TransportInformation>
</EnhancedServicePrequalResponse>
<EnhancedServicePrequalResponse xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
<Code>10000</Code>
<Message>Thank You!</Message>
<SFDCProductList>
<SFDCProduct>
<OfferName>XYZ</OfferName>
<OfferDisplayName>New Offer</OfferDisplayName>
<OfferType>New</OfferType>
<EndDate>2021-02-16</EndDate>
<OfferLineItemList>
<OfferLineItem>
<OfferLineItemCategory>Transport Service</OfferLineItemCategory>
<OfferLineItemName>transport</OfferLineItemName>
</OfferLineItem>
<OfferLineItem>
<OfferLineItemCategory>Device</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
</OfferLineItemList>
<TransportName>BR</TransportName>
</SFDCProduct>
</SFDCProductList>
<SFDCProductList>
<SFDCProduct>
<OfferName>Upgrade</OfferName>
<OfferDisplayName>Upgrade</OfferDisplayName>
<OfferType>Upgrade</OfferType>
<EndDate>2021-02-16</EndDate>
<OfferLineItemList>
<OfferLineItem>
<OfferLineItemCategory>Transport</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
<OfferLineItem>
<OfferLineItemCategory>Device</OfferLineItemCategory>
<OfferLineItemName>Billing</OfferLineItemName>
</OfferLineItem>
</OfferLineItemList>
<TransportName>JR</TransportName>
</SFDCProduct>
</SFDCProductList>
<TransportInformation>
<TransportFeasibilityParameter>
<AvailabilityFlag>true</AvailabilityFlag>
<BusinessAvailabilityFlag>true</BusinessAvailabilityFlag>
<TransportName>BR</TransportName>
</TransportFeasibilityParameter>
<TransportFeasibilityParameter>
<AvailabilityFlag>true</AvailabilityFlag>
<BusinessAvailabilityFlag>true</BusinessAvailabilityFlag>
<TransportName>JR/TransportName>
</TransportFeasibilityParameter>
</TransportInformation>
</EnhancedServicePrequalResponse>
Я пробовал использовать экстрактор xpath, но не сохранял его в переменной.
Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве массива мне нужен только тот SFDCProductlist, в элементе которого есть ключевое слово «New».
The beanshell Script:
int SFDCProduct_matchNr =vars.get("SFDCProduct_matchNr");
String list = "SFDCProduct"+"_"+"SFDCProduct_matchNr";
int SFDCProduct_matchNrvalue=SFDCProduct_matchNr-1;
vars.put("SFDCProduct_matchNr", "SFDCProduct_matchNrvalue");
vars.put("sfdc", "list");enter code here
But still its not assigning the sfdc with SFDCProduct_1 value??
Я обновил фактическую полезную нагрузку.
С помощью простого экстрактора xpath я могу получить общее количество переменных, сгенерированных с его помощью: SFDCProduct_matchNr. Но мне нужно поставить условие / цикл, который перебирает эти переменные, и если есть новая подстрока, используйте эту переменную «SFDC_Product_1» в следующих шагах.
Я использовал цикл while, затем обработчик оболочки bean-компонентов и экстрактор регулярных выражений. В то время как проверяется номер SFDCProduct_matchNr и установлена ли переменная в NEw из экстрактора Regex. Beanshell присваивает новой переменной нужный нам SFDCProduct_i, а регулярное выражение создает переменную, в которой хранится ключевое слово New, если в этой переменной присутствует NEw. Но почему-то он не попадает в цикл while. ??
Условие while: $ {__ javaScript ("$ {SFDCProduct_matchNr}" == -1 && "$ {SFDCProduct_NewOffer}" == "New",)}.
Спасибо всем за решение. Я решил до некоторой степени. Последняя часть, которую я публикую как вопрос.
Чтобы извлечь содержимое внутри определенных границ, вы можете использовать Пограничный экстрактор:
Выберите в качестве левой границы и </SFDCProductList>
в качестве правой границы.
Поместите новое имя переменной в Name of created variable
как productList и используйте его позже как ${productList}
или vars.get("productList")
внутри сценария JSR223.
Allows the user to extract values from a server response using left and right boundaries. As a post-processor, this element will execute after each Sample request in its scope, testing the boundaries, extracting the requested values, generate the template string, and store the result into the given variable name.
Это сработало. Спасибо. Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве массива мне нужен только тот SFDCProductlist, который имеет ключевое слово «New» в элементе <OfferName>. Как я могу этого добиться?
Судя по вашему коду ответа, существует более одного списка продуктов.
Чтобы получить все, вам нужно установить для Match No. значение -1 в экстракторе границ. Затем используйте vars.get {"Product_List_1"}, чтобы получить конкретный.
Если вам нужно все в одной переменной, один из способов - это объединить разные списки массивов.
Я успешно извлек SFDCProductlist с помощью Boundary extractor, но в качестве массива мне нужен только тот SFDCProductlist, который имеет ключевое слово «New» в элементе <OfferName>. Есть ли способ соединения регулярного выражения и границы?
Не увидев полного XML-ответа, мы не сможем прийти к точному решению, однако для типов ответов XML имеет смысл придерживаться Экстрактор XPath.
Соответствующий запрос XPath должен быть примерно таким: //SFDCProductList
- он в основном вернет все, что находится под тегом <SFDCProductList>
:
Если это не так - дважды проверьте свое выражение XPath, используя режим «XPath Tester» слушателя Просмотр дерева результатов, в некоторых случаях вам может потребоваться:
Use Tidy
, если ответ недействителен XML / XHTML.Использованная литература:
Помог ли мой ответ?