Могу ли я повторно использовать шаблоны XSL с уникальным содержимым XML? - PullRequest
1 голос
/ 03 июня 2011

Может быть, есть лучший способ описать мою проблему ...

Вот пример того, что я хотел бы сделать:

Возьми это:

<inc_3c>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c>

и скопируйте его так:

<inc_3c-copy>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c-copy>
  • inc_3c = заполняет контент на странице # 1
  • inc_3c-copy = заполняет контент на странице # 2

может быть даже сценарий, когда inc_3c и inc_3c-copy находятся на одной странице.

надеюсь, мне не нужно будет создавать другую страницу XSL.

это должнобыть не кодирующим доказательством.

1 Ответ

3 голосов
/ 03 июня 2011

Узнайте, как использовать правило идентификации / шаблон и переопределить его. Это одно из самых фундаментальных и мощных шаблонов проектирования XSLT .

В вашем случае мы используем этот шаблон проектирования, чтобы переопределить только верхний элемент следующим образом:

<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="/inc_3c">
  <inc_3c-copy>
   <xsl:apply-templates/>
  </inc_3c-copy>
 </xsl:template>
</xsl:stylesheet>

При применении к предоставленному документу XML:

<inc_3c>
    <Title>This is 3C</Title>
    <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
    <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
    <Class>priceWrapper</Class>
    <Price>$00.00</Price>
    <Url>Url</Url>
    <Image>apple-tv.png</Image>
</inc_3c>

желаемый, исправленный результат получается :

<inc_3c-copy>
   <Title>This is 3C</Title>
   <Subtitle>Lorem ipsum dolor consectetur adipiscing elit. Fusce mattis consequat malesuada.</Subtitle>
   <Description>Consectetur adipiscing elit. Fusce mattis consequat malesuada. Nullam vel justo a dui pellentesque euismod. Integer eu pulvinar dolor.</Description>
   <Class>priceWrapper</Class>
   <Price>$00.00</Price>
   <Url>Url</Url>
   <Image>apple-tv.png</Image>
</inc_3c-copy>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...