#xml #xslt
#xml #xslt
Вопрос:
Возможно, есть лучший способ описать мою проблему…
Вот пример того, что я хотел бы сделать:
Возьмите это:
<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. Хороший вопрос, 1. Смотрите мой ответ для получения полного, очень короткого и простого решения, основанного на самом фундаментальном и мощном шаблоне проектирования XSLT — переопределении правила идентификации .
Ответ №1:
Узнайте об использовании правила идентификации / шаблона и его переопределении. Это само по себе является наиболее фундаментальным и мощным шаблоном проектирования 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>
Комментарии:
1. Спасибо, Димитр, я собираюсь попробовать эту штуку. Я скоро похвалю вас!