Apologies.I видел много похожих вопросов, но, к сожалению, большинство из них не работало для меня. Мое требование: 1) Я должен добавить пространство имен только для корневого элемента, используя XSLT 2) Я использую xsl: result-document для создания нескольких XML-файлов с одного входа. Элементы Root для всего результирующего документа должны иметь пространство имен.Добавление пространства имен только к корневому элементу с помощью xslt
Если я попробую следующее решение, я получаю XMLNS во всех моих дочерних корневых тегах. Если я попробую xsl: copy, я получаю тег от ввода XML, который мне не нужен, потому что мои выходные теги полностью отличаются от моего ввода.
I/р:
<einfo>
<employee>
<eid>456</eid>
<firstname>def</firstname>
<lastname>y</lastname>
</employee>
</einfo>
мой XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Global Variables -->
<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:template match="einfo">
<xsl:for-each select="employee">
<xsl:variable name="docName" select="eid"/>
<xsl:result-document href="{$docName}">
<xsl:element name="employee" namespace="myurl">
<xsl:call-template
name="processEmployees">
<xsl:with-param name="p_firstname"
select="firstname"/>
<xsl:with-param name="p_lastname"
select="lastname"/>
</xsl:call-template>
</xsl:element>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template name="processEmployees">
<xsl:param name="p_firstname"/>
<xsl:param name="p_lastname"/>
<xsl:element name="firstname">
<xsl:value-of select="$p_firstname"/>
</xsl:element>
<xsl:element name="lastname">
<xsl:value-of select="$p_lastname"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Фактический выход:
<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns="myurl">
<firstname xmlns="">def</firstname>
<lastname xmlns="">y</lastname>
</employee>
Ожидаемый результат: Мне нужен только корневой элемент, т.е. служащему иметь пространство имен (XMLNS).
Пожалуйста, пост ** ** воспроизводимого примера, в том числе входа и ** ** полного (желательно) свернутая таблицы стилей - см: [mcve]. - В общем, вы неправильно понимаете, как работают пространства имен.По умолчанию пространство имен наследуется. Если вы не хотите, чтобы 'address' имел переопределяющее объявление пространства имен без имени, которое оно имеет сейчас, вы должны поместить его в то же пространство имен, что и родительский' home'. Аналогично для всех остальных элементов в дереве результатов. –