У меня есть ввод XML, в котором я пытаюсь сохранить теги CDATA. У меня есть простая таблица стилей, которую я использую, но по какой-то причине я не могу понять, теги CDATA появляются, только если я добавляю apply-templates иположить что-то в мой шаблон совпадения.
Вот мой ввод XML.Все в ns1: entry будет иметь тег CDATA.По сути, я хочу, чтобы мой вывод был точно таким же, как и мой.Я использую DataPower для защиты сообщений, и он удаляет CDATA, поэтому этот XSLT должен убедиться, что он сохранен.
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<User xmlns="http://google.com/schema" xmlns:ns1="http://google.com/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:user xmlns:ns1="http://google.com/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:userId>12345</ns1:userId>
<ns1:extraMap ns1:size="15" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:entry ns1:key="devicetype" xsi:type="xsd:string">
<![CDATA[iPhone10,6]]>
</ns1:entry>
<ns1:entry ns1:key="longitude" xsi:type="xsd:string">
<![CDATA[-70.000000]]>
</ns1:entry>
<ns1:entry ns1:key="latitude" xsi:type="xsd:string">
<![CDATA[40.000000]]>
</ns1:entry>
<ns1:entry ns1:key="osname" xsi:type="xsd:string">
<![CDATA[iOS]]>
</ns1:entry>
</ns1:extraMap>
<ns1:profile-status>
<ns1:enum-class>xxxxxx</ns1:enum-class>
<ns1:enum-value>Active</ns1:enum-value>
</ns1:profile-status>
</ns1:user>
</User>
</soapenv:Body>
</soapenv:Envelope>
Таблица стилей:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://google.com/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:str="http://exslt.org/strings"
version="1.0" exclude-result-prefixes="dp ns1 xsi">
<xsl:output method="xml" encoding="utf-8" version="1.0"
cdata-section-elements="ns1:entry ns1:userId" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="."/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()"/>
С этой таблицей стилей теги CDATA удаляются.Если я изменю соответствие шаблона следующим образом, я получу теги CDATA, но также и сообщение, сопровождаемое связкой 1 с (как и ожидалось).
<xsl:template match="text()"/>1</xsl:template>
Я не могу понять, как получитьТаблица стилей хранит теги CDATA без соответствия шаблону, которое выполняет некоторую функцию.Любой совет будет принята с благодарностью.Я занимался этим слишком долго и теперь буду ходить кругами.
DataPower XI52 7.6.0.6