我正在开发一种为飞机运营商制定飞行计划的软件。飞机有一个传感器,可以调整各种设置,这些设置通过我们所说的"段"飞行计划。 (段是计划中的某段时间,传感器设置仅在段之间移动时才会更改。)
飞行计划作为HTML文件输出,该文件是通过C#.NET中的XslCompiledTransform从序列化XML对象的XSL转换生成的。它的结构非常一致,因为要调整的设置数量有限。对于每个段,输出一对表,由<hr />
标记分隔。
我希望能够做的是获取该输出,并且每次设置从一个段到另一个段发生变化时,通过将其包装在{{1标签。 A(释义)示例:( EDITED for澄清)
<b>
考虑到XSL转换的输出,我想在一个或标签中包装c以加粗它,结果是这样的:
<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>
我不确定是否在.net中编写辅助对象,使用实用程序,通过单独的XSL转换运行输出,或者是什么。 根据我手边的工具,最好的方法是什么?
答案 0 :(得分: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>