У меня есть XML-файл с пространством имен по умолчанию xmlns = "http://www.xxxx.com/xyz"
и целевым пространством имен xmlns:tns = "http://www.xxxx.com/xyz"
. Оба необходимо удалить.
<?xml version = "1.0" encoding = "UTF-8" ?>
<Root xmlns:tns = "http://www.xxxx.com/xyz" xmlns = "http://www.xxxx.com/xyz">
<Header type = "XXXX" purpose = "Original" xmlns = "">
<ID>XXXXXX</ID>
</Header>
</Root>
Я использую приведенный ниже код, но он не удаляет пространство имен по умолчанию xmlns = "http://www.xxxx.com/xyz"
из корневого элемента.
<xsl:template match = "*">
<!-- remove element prefix -->
<xsl:element name = "{local-name()}">
<!-- process attributes -->
<xsl:for-each select = "@*">
<!-- remove attribute prefix -->
<xsl:attribute name = "{local-name()}">
<xsl:value-of select = "."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Может ли кто-нибудь помочь подсказать, как решить этот случай?
XML-изображение для справки
Если вы хотите удалить пространство имен по умолчанию, вы не сможете вернуть переименованные элементы обратно в исходное пространство имен.
Видя, что атрибуты в вашем примере не находятся в пространстве имен (как это чаще всего бывает), я считаю, что вы могли бы сделать просто:
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" version = "1.0" encoding = "UTF-8" indent = "yes"/>
<xsl:template match = "*">
<xsl:element name = "{local-name()}">
<xsl:copy-of select = "@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Демо здесь.
Привет, я попробовал эту логику, у меня не работает. Есть еще идеи?
«Не работает» — бесполезное описание проблемы. Вы можете убедиться, что он работает в демо-версии (см. добавленную ссылку в моем ответе).
Привет, я попробовал демонстрационную ссылку, учитывая, что логика в демонстрационной ссылке для моего XML отлично работала. Я также попробовал ту же логику в преобразовании SOA 12c, там она не работает. Странный!
Я исправил проблему SOA 12c, связанную с удалением пространства имен по умолчанию из вывода файла, добавив KeepSrcElementName = "yes" для копирования активности файла в BPEL. Идентификатор документа Oracle 2646315.1 для справки support.oracle.com/epmos/faces/DocContentDisplay?id=2646315.1
Пожалуйста, публикуйте весь соответствующий код в виде кода, а не изображений.