XSL Transformation help - PullRequest
       11

XSL Transformation help

2 голосов
/ 13 марта 2011

В настоящее время у меня есть следующий XML-файл:

<Regions>
  <Region>
     <Code>AU</Code>
     <Name>Austria</Name>
  </Region>
</Regions>
<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>
<Programs>
   <Program>
      <Code>00</Code>
      <Name>Program</Name>          
   </Program>
</Programs>

Я бы хотел сохранить путь Channels , чтобы результат выглядел следующим образом при использовании XSLT:

<Channels>
    <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
    </Channel>
    ...
</Channels>

1 Ответ

2 голосов
/ 13 марта 2011

Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="/t/*[not(self::Channels)]"/>
</xsl:stylesheet>

при применении к предоставленному документу XML (исправлено, чтобы быть правильно оформленным):

<t>
    <Regions>
        <Region>
            <Code>AU</Code>
            <Name>Austria</Name>
        </Region>
    </Regions>
    <Channels>
        <Channel>
            <Code>00</Code>
            <Name>Im a channel</Name>
        </Channel>    
    </Channels>
    <Programs>
        <Program>
            <Code>00</Code>
            <Name>Program</Name>
        </Program>
    </Programs>
</t>

дает желаемый, правильный результат:

<Channels>
   <Channel>
      <Code>00</Code>
      <Name>Im a channel</Name>
   </Channel>
</Channels>

Объяснение

Использование правила идентификации , переопределенного для верхнего элемента (сквозного) и для любых не Channels дочерних элементов верхнего элемента (удалить).

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