Я совершенно новичок в XSLT и не знаю, как найти решение для моего желаемого преобразования.Мы получаем запрос SOAP и должны проверить, существует ли определенный тег (Шаги).Если его нет, я хочу добавить его в сообщение SOAP.
Мы запускаем интерфейс в Azure API Management, который позволяет XSLT только в версии 1.0.
Пример XML
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ProductionToSupply xmlns="http://somenamespace.com">
<ProductionDataList>
<ProductionData>
<Material_Number>5</Material_Number>
<Doc_Number>1234</Doc_Number>
<Description>abcde</Description>
</ProductionData>
</ProductionDataList>
</ProductionToSupply>
</soap:Body>
</soap:Envelope>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://somenamespace.com" exclude-result-prefixes="ns1">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="soap:Envelope/soap:Body/ns1:ProductionToSupply/ns1:ProductionDataList/ns1:ProductionData/ns1:Doc_Number">
<xsl:if test="not(soap:Envelope/soap:Body/ns1:ProductionToSupply/ns1:ProductionDataList/ns1:ProductionData/ns1:Steps)">
<Steps xmlns="http://somenamespace.com">NA</Steps>
</xsl:if>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
желаемый результат
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ProductionToSupply xmlns="http://somenamespace.com">
<ProductionDataList>
<ProductionData>
<Material_Number>5</Material_Number>
<Doc_Number>1234</Doc_Number>
<Description>abcde</Description>
<Steps>NA</Steps>
</ProductionData>
</ProductionDataList>
</ProductionToSupply>
</soap:Body>
</soap:Envelope>
Ожидаемый результат будет только добавитьтег «Шаги», если его нет в группе «ProductionData», но я не знаю, как установить соответствующий шаблон соответствия.
Заранее благодарен за помощь, Тим