У меня есть этот XML:Условный XSLT преобразование
<TreeView>
<Parent text="Installation">
<child company="all" text="Startup" type="video" file="startup.mp4"/>
<child company="all" text="Getting there" type="video" file="small.mp4"/>
<child company="all" text="Steps" type="pdf_document" file="test.pdf"/>
<child company="all" text="Pictures" type="presentation" file="pics.ppx"/>
</Parent>
<Parent text="Usage">
<child company="B" text="Tilbud pane" type="video" file="b1.mp4"/>
<child company="B" text="Report pane" type="pdf_document" file="b2.pdf"/>
<child company="N" text="Tilbud pane" type="video" file="n1.mp4"/>
<child company="N" text="Report pane" type="pdf_document" file="n2.pdf"/>
<child company="D" text="Tilbud pane" type="video" file="d1.mp4"/>
<child company="D" text="Report pane" type="pdf_document" file="d2.pdf"/>
</Parent>
</TreeView>
И это XSLT до сих пор:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
<ul id="LinkedList1" class="LinkedList">
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="Parent">
<li>
<xsl:value-of select="@text"/>
<br/>
<ul>
<xsl:apply-templates select="child"/>
</ul>
</li>
</xsl:template>
<xsl:template match="child[@type='video']">
<li>
<a href="{@file}" class="video">
<img src="play_icon.png" alt="video" title="Video tutorial"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@text"/>
</a>
</li>
</xsl:template>
<xsl:template match="child[@type='pdf_document']">
<li>
<a href="{@file}" class="pdfdoc">
<img src="pdf_icon.png" alt="pdfdoc" title="PDF Document"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@text"/>
</a>
</li>
</xsl:template>
<xsl:template match="child[@type='presentation']">
<li><a href="{@file}" class="presentation">
<img src="powerpoint_icon.png" alt="presentation" title="Power Point presentation"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@text"/>
</a>
</li>
</xsl:template>
</xsl:stylesheet>
Он прекрасно работает, как задумано, но я хочу добавить еще один функция преобразования. Я хочу, в зависимости от значения атрибута , чтобы включить весь элемент или пропустить его.
Разработка: элементы по уходу за детьми, чьи стоимость компании атрибут «все» всегда должны быть включены в преобразованном файле. Впоследствии остальные элементы Child должны быть сгруппированы только в том случае, если они имеют, то есть компания значение атрибута «B». Тогда у меня будет 3 разных файла XSL для разных компаний. Поэтому мне нужен код XSL только для одной компании.
Я не уверен, должен ли я использовать условную инструкцию или шаблоны для этого. Я просто прослушиваю, потому что мой XSL-файл стал для меня «сложным».
Если кто-то может сделать дополнение с моими требованиями, к существующему коду - он будет весьма признателен.
Здравствуйте Milknocookiez, вы можете добавить XPATH к вашему для фильтрации элементов: . Это даст вам только нужные элементы. Но как их группировать? Вы уже изучили это? С уважением, PEter –
Peter
@Peter - Спасибо. Они должны быть сгруппированы так же, как и раньше. Единственное дополнение, в котором я нуждаюсь, - это различие между атрибутом * company *. Итак, если атрибут ** все ** или ** B ** - они группируются, а остальные пропускаются. – Milkncookiez