Преобразовать SOAP-запрос с помощью XSLT | Для каждой проблемы цикла
У меня есть SOAP-запрос, который выглядит следующим образом;
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCountriesResponse xmlns="url">
<GetCountriesResult>
<ExtendedOptionItem>
<Value>GB</Value>
<Description>United Kingdom</Description>
<Active>true</Active>
<IsDefault>true</IsDefault>
<Order>0</Order>
</ExtendedOptionItem>
<ExtendedOptionItem>
<Value>GB</Value>
<Description>United Kingdom</Description>
<Active>true</Active>
<IsDefault>true</IsDefault>
<Order>0</Order>
</ExtendedOptionItem>
</GetCountriesResult>
</GetCountriesResponse>
</soap:Body>
</soap:Envelope>
Мой XSLT на данный момент специально нацелен на узел "Описание". Что я хотел бы сделать, это вытащить описание для каждого "ExtendedOptionItem".
Я написал несколько XSLT, которые должны разделять каждое описание точкой с запятой.
Этот XSLT работает абсолютно нормально, когда есть только один "ExtendedOptionItem". Однако при наличии нескольких элементов XML не преобразуется.
Пожалуйста, вы можете просмотреть мой XSLT и оценить, где я ошибаюсь;
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" omit-xml-declaration="no" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<xsl:for-each xmlns:n="url" select="n:ExtendedOptionItem">
<xsl:value-of select="n:Description" />;</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Большое спасибо
ОБНОВИТЬ;
Ответ SOAP изменяется модулем Workflow и выглядит следующим образом;
<ExtendedOptionItem xmlns="url"><Value>GB</Value><Description>United Kingdom</Description><Active>true</Active><IsDefault>true</IsDefault><Order>0</Order></ExtendedOptionItem><ExtendedOptionItem xmlns="url"><Value>AF</Value><Description>Afghanistan</Description><Active>true</Active><IsDefault>false</IsDefault><Order>0</Order></ExtendedOptionItem><ExtendedOptionItem xmlns="url"><Value>AX</Value><Description>Åland Islands</Description><Active>true</Active><IsDefault>false</IsDefault><Order>0</Order></ExtendedOptionItem>
1 ответ
Этот XSLT работает абсолютно нормально, когда есть только один "ExtendedOptionItem".
Нет, это не так.
Проблема в том, что ваш шаблон соответствует /
корневой узел - и ExtendedOptionItem
не дитя /
корневой узел. В результате ваш:
<xsl:for-each xmlns:n="url" select="n:ExtendedOptionItem">
ничего не выбирает. Попробуйте изменить это на:
<xsl:for-each xmlns:n="url" select="//n:ExtendedOptionItem">