2012-02-24 2 views
0

Я работаю над программным обеспечением, которое разрабатывает планы полета для операторов воздушных судов. У самолета есть датчик, который может иметь различные настройки, и эти настройки разделяются в соответствии с тем, что мы называем «сегментами» плана полета. (Сегмент - некоторое определенное количество времени в плане, и настройки датчика изменяются только при перемещении между сегментами.)Отображение измененных элементов на выходе XSLT жирным шрифтом

План полета выводится как файл HTML, который генерируется из преобразования XSL сериализованного объекта XML , через XslCompiledTransform в C# .NET. Его структура очень последовательна, так как существует ограниченное количество настроек для настройки. Для каждого сегмента выводится пара таблиц, разделенных метками <hr />.

То, что я хотел бы сделать, это взять этот вывод, и каждый раз, когда параметр изменяется от сегмента к сегменту, полужирный текст этого параметра в конечном результате обертывает его в теги <b>. A (перефразировал) Пример: (EDITED разъяснений)

<table> 
    <tr> 
    <td>Setting 1</td><td>a</td> 
    <td>Setting 2</td><td>b</td> 
    </tr> 
</table> 
<table> 
    <tr> 
    <td>Setting 3</td><td>c</td> 
    </tr> 
<table> 

<hr /> 

<table> 
    <tr> 
    <td>Setting 1</td><td>a</td> 
    <td>Setting 2</td><td>d</td> 
    </tr> 
</table> 
<table> 
    <tr> 
    <td>Setting 3</td><td>c</td> 
    </tr> 
<table> 

Учитывая, что выход из XSL преобразования, я хотел бы, чтобы обернуть с в или тег смелое его, в результате чего-то вроде этого:

<table> 
    <tr> 
    <td>Setting 1</td><td>a</td> 
    <td>Setting 2</td><td>b</td> 
    </tr> 
</table> 
<table> 
    <tr> 
    <td>Setting 3</td><td>c</td> 
    </tr> 
<table> 

<hr /> 

<table> 
    <tr> 
    <td>Setting 1</td><td>a</td> 
    <td>Setting 2</td><td><b>d</b></td> 
    </tr> 
</table> 
<table> 
    <tr> 
    <td>Setting 3</td><td>c</td> 
    </tr> 
<table> 

Я не уверен, написать ли вспомогательный объект в .net, использовать утилиту, запустить вывод через отдельное преобразование XSL или что. Что было бы лучшим методом для этого, учитывая инструменты, которые у меня есть?

+0

Вы просите преобразование XSLT для преобразования вывода первого преобразования в новый желаемый формат? Если да, можете ли вы предоставить минимальный, но хорошо сформированный XML-документ, который является результатом первого преобразования, и должен ли быть вход требуемого преобразования? –

+0

Я отредактировал свой пример для ясности (чтобы показать согласованные пары таблиц с указанным мной hr). Я не хочу загружать настоящий HTML-код, который я собираю, поскольку он является государственным проектом, Я уверен, вы понимаете. :) –

+0

Почему вы не можете сразу предоставить * хорошо сформированный * XML? –

ответ

1

Это XSLT 1.0 Преобразование:

<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= 
"table[preceding-sibling::table[2]] 
    /tr 
     /td[position() mod 2 = 0] 
"> 
    <xsl:variable name="vPos" select="position()"/> 
    <xsl:variable name="vPrevTableTD" select= 
    "../../preceding-sibling::table[2] 
       /tr/td[position() = $vPos]"/> 

    <td> 
     <xsl:choose> 
     <xsl:when test="not(. = $vPrevTableTD)"> 
     <b><xsl:value-of select="."/></b> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="."/> 
     </xsl:otherwise> 
     </xsl:choose> 
    </td> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на следующем документе XML (предоставленному один за что делает его хорошо сформированный документ XML):

<html> 
    <table> 
     <tr> 
      <td>Setting 1</td> 
      <td>a</td> 
      <td>Setting 2</td> 
      <td>b</td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td>Setting 3</td> 
      <td>c</td> 
     </tr> 
    </table> 
    <hr /> 
    <table> 
     <tr> 
      <td>Setting 1</td> 
      <td>a</td> 
      <td>Setting 2</td> 
      <td>d</td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td>Setting 3</td> 
      <td>c</td> 
     </tr> 
    </table> 
</html> 

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

<html> 
    <table> 
     <tr> 
     <td>Setting 1</td> 
     <td>a</td> 
     <td>Setting 2</td> 
     <td>b</td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
     <td>Setting 3</td> 
     <td>c</td> 
     </tr> 
    </table> 
    <hr> 
    <table> 
     <tr> 
     <td>Setting 1</td> 
     <td>a</td> 
     <td>Setting 2</td> 
     <td><b>d</b></td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
     <td>Setting 3</td> 
     <td>c</td> 
     </tr> 
    </table> 
</html> 
+0

Мой пример был не совсем ясен, и в результате я не очень хорошо справляюсь с этой таблицей стилей. Извини за это. Я обновил пример для ясности. –

+0

@JimDagg: Я отредактировал ответ. Теперь он обрабатывает ваш последний формат документа XML и выдает желаемый результат. –