Мне нужно создать документ перевода для отката наших новых тел сообщений. Мне удалось откатить пространство имен без проблем, но возникли проблемы при откате targetNamespace.
В коде Java для targetNamespace задано значение new_namespace: 1.1.0
Входящее XML-сообщение выглядит следующим образом.
<env xmlns="original_cap_namespace" targetNamespace="new_namespace:1.1.0"</env>
Я хочу, чтобы исходящее сообщение выглядело так (замените пространство имен cap на новое_имя пространства и удалите контроль версий в taretNamespace)
<env xmlns="new_namespace" targetNamespace="new_namespace" </env>
Вот что я попробовал. Это работает для замены оригинального пространства имен_cap новым пространством имен. Кажется, я не могу понять, как убрать управление версиями из targetNamespace или установить targetNamespace в new_namespace так же, как xmlns. Я хочу, чтобы xmlns и targetNamespace были установлены в new_namespace.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="new_namespace"
xmlns:cap="original_cap_namespace"
exclude-result-prefixes="cap">
<xsl:output method="xml" indent="no" standalone="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*[local-name()='env']">
<env xmlns="new_namespace">
<xsl:apply-templates select="@* | node()"/>
</env>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
Большое спасибо.