У меня есть этот XML-файл:XSLT преобразование содержимого SOAP сообщений
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:wordList xmlns:ns2="http://service/">
<prefix1>b</prefix1>
<prefix2>a</prefix2>
</ns2:wordList>
</S:Body>
</S:Envelope>
Я хочу, чтобы преобразовать этот файл:
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:wordList xmlns:ns2="http://service/">
<pre1>b</pre1>
<pre2>a</pre2>
</ns2:wordList>
</S:Body>
</S:Envelope>
Однако то, что я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<pre1 xmlns:ns2="http://ws/">b</pre1>
<pre2 xmlns:ns2="http://ws/">a</pre2>
Мое преобразование:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="http://ws/"
version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ns2:wordList">
<ns2:wordList xmlns:ns2="http://ws/">
<xsl:apply-templates/>
</ns2:wordList>
</xsl:template>
<xsl:template match="pre1|prefix1">
<pre1>
<xsl:value-of select="."/>
</pre1>
</xsl:template>
<xsl:template match="pre2|prefix2">
<pre2>
<xsl:value-of select="."/>
</pre2>
</xsl:template>
</xsl:stylesheet>
Почему я теряю почти всю информацию? Я бы подумал, что преобразование XSL просто скопирует все элементы, которые не заданы определенным шаблоном, но вместо этого все, кажется, теряется, кроме информации, содержащейся в шаблонах «pre».
Ваше использование пространств имен XML является непоследовательным и запутанным. Какой смысл регистрировать одно и то же пространство имен с двумя разными префиксами ('S' и' SOAP-ENV')? Что означает 'http: // ws /'? Это ни в одном из ваших входных документов. Наконец, XSLT не просто копирует все элементы, которые не заданы определенным шаблоном. Это задание шаблона идентификации, которого у вас нет в XSLT. – Tomalak
Это также можно рассматривать как дубликат таких вопросов, как: http://stackoverflow.com/questions/4970678/renaming-nodes-and-values-with-xslt – Meyer