Така че имам входен файл, който използва пространството от имена на моята компания в пространството от имена по подразбиране (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 според моя опит.