Итак, у меня есть входной файл, который использует пространство имен моей компании в пространстве имен по умолчанию (xmlns="companyURL"
), но я хочу, чтобы мой выходной файл использовал что-то другое, чем пространство имен по умолчанию (xmlns:cmp="companyURL"
). Итак, я создаю свой файл, используя пространство имен cmp
, но затем я хочу скопировать некоторые внутренние элементы:
<xsl:element name="cmp:container">
<xsl:for-each select="foo">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:element>
К сожалению, это определяет пространство имен по умолчанию для каждого из этих внутренних элементов, что делает файл невероятно многословным и уродливым. Упрощенный пример:
Источник:
<foo xmlns="companyURL">
<num1>asdf</num1>
<num2>ghjkl</num2>
</foo>
Превращается в:
<cmp:container xmlns:cmp="companyURL">
<num1 xmlns="companyURL">asdf</num1>
<num2 xmlns="companyURL">ghjkl</num2>
</cmp:container>
Конечно, companyURL
большое, длинное и уродливое, и оно одинаково в обоих местах, поэтому я бы предпочел, чтобы вышеприведенный результат был следующим:
<cmp:container xmlns:cmp="companyURL">
<cmp:num1>asdf</cmp:num1>
<cmp:num2>ghjkl</cmp:num2>
</cmp:container>
Есть ли простой способ сделать это или мне следует преобразовать все в пространстве имен cmp
в пространство имен по умолчанию? Я бы предпочел использовать явное именование пространства имен, если это возможно, это помогает понять XSLT по моему опыту.