Могу ли я исключить объявления пространства имен в этом выводе преобразования? - PullRequest
0 голосов
/ 02 мая 2011

Я хотел бы динамически генерировать файл XML, используя XMLT, который принимает другой файл XML в качестве входных данных.

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" />

 <xsl:template match="data">
   <xsl:apply-templates select="books" />
 </xsl:template>

 <xsl:template match="books">
   <books>
     <xsl:apply-templates select="chapters" />
   </books>
 </xsl:template>

<xsl:template match="chapters">
  <chapter name="{@name}" source="{@source}"
  xmlns:xi="http://www.w3c.org/2001/XInclude">
      <xsl:apply-templates select="pages" />
  </chapter>
</xsl:template>

 <xsl:template match="pages" xmlns:xi="http://www.w3.org/2001/XInclude">
   <xi:include>
      <xsl:value-of select="@name" />
    </xi:include>
 </xsl:template>

</xsl:stylesheet>

Мой желаемый вывод ниже.

<chapter 
xmlns:xi="http://www.w3c.org/2001/XInclude" name="chapter1">
    <xi:include>page1</xi:include>
    <xi:include>page2</xi:include>
    <xi:include>page3</xi:include>
</chapter>

К сожалению, мой код генерирует вывод ниже.

<chapter 
xmlns:xi="http://www.w3c.org/2001/XInclude" name="chapter1">
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude">page1</xi:include>
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude">page2</xi:include>
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude">page3</xi:include>
</chapter>

Есть ли способ, которым я мог бы устранитьфактический URI для пространства имен, для которого я могу иметь xi: включать тэги без них?

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Обратите внимание, что вы используете два разных URI пространства имен :

http://www.w3.org/2001/XInclude

и

http://www.w3c.org/2001/XInclude

Если они совпадают, пространство имен процесс исправления позаботится об этом.

Для этого ввода:

<books>
    <chapters name="chapter1">
        <pages name="page1"/>
        <pages name="page2"/>
        <pages name="page3"/>
    </chapters>
</books>

Эта таблица стилей (ваша с исправленной опечаткой):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="data">
        <xsl:apply-templates select="books" />
    </xsl:template>
    <xsl:template match="books">
        <books>
            <xsl:apply-templates select="chapters" />
        </books>
    </xsl:template>
    <xsl:template match="chapters">
        <chapter name="{@name}" source="{@source}"
         xmlns:xi="http://www.w3c.org/2001/XInclude">
            <xsl:apply-templates select="pages" />
        </chapter>
    </xsl:template>
    <xsl:template match="pages" xmlns:xi="http://www.w3c.org/2001/XInclude">
        <xi:include>
            <xsl:value-of select="@name" />
        </xi:include>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<books>
    <chapter name="chapter1" source="" 
     xmlns:xi="http://www.w3c.org/2001/XInclude">
        <xi:include>page1</xi:include>
        <xi:include>page2</xi:include>
        <xi:include>page3</xi:include>
    </chapter>
</books>
2 голосов
/ 02 мая 2011

Переместить xmlns:xi="http://www.w3.org/2001/XInclude" в элемент xsl:stylesheet:

<xsl:stylesheet version="1.0"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" />

 <xsl:template match="data">
   <xsl:apply-templates select="books" />
 </xsl:template>

 <xsl:template match="books">
   <books>
     <xsl:apply-templates select="chapters" />
   </books>
 </xsl:template>

<xsl:template match="chapters">
  <chapter name="{@name}" source="{@source}">
      <xsl:apply-templates select="pages" />
  </chapter>
</xsl:template>

 <xsl:template match="pages">
   <xi:include>
      <xsl:value-of select="@name" />
    </xi:include>
 </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...