Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 以粗体显示XSLT输出中更改的元素_.net_Xslt - Fatal编程技术网

.net 以粗体显示XSLT输出中更改的元素

.net 以粗体显示XSLT输出中更改的元素,.net,xslt,.net,Xslt,我正在开发一个软件,为飞机操作员开发飞行计划。飞机有一个可以调整各种设置的传感器,这些设置通过我们称之为飞行计划“分段”的方式进行分割。(段是计划中的某一特定时间,传感器设置仅在段之间移动时更改。) 飞行计划输出为HTML文件,该文件通过C#NET中的XslCompiledTransform对序列化XML对象进行XSL转换生成。其结构非常一致,因为需要调整的设置数量有限。对于每个段,输出一对表,由标记分隔 我想能够做的是获取该输出,每次设置从一个段更改到另一个段时,通过将其包装在标记中,在最终输

我正在开发一个软件,为飞机操作员开发飞行计划。飞机有一个可以调整各种设置的传感器,这些设置通过我们称之为飞行计划“分段”的方式进行分割。(段是计划中的某一特定时间,传感器设置仅在段之间移动时更改。)

飞行计划输出为HTML文件,该文件通过C#NET中的XslCompiledTransform对序列化XML对象进行XSL转换生成。其结构非常一致,因为需要调整的设置数量有限。对于每个段,输出一对表,由

标记分隔

我想能够做的是获取该输出,每次设置从一个段更改到另一个段时,通过将其包装在
标记中,在最终输出中加粗该设置的文本。(意译)示例:(为澄清而编辑)


设置1a
设置2b
设置3c

设置1a 设置2d 设置3c
考虑到XSL转换的输出,我想用or标记将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><b>d</b></td>
  </tr>
</table>
<table>
    <tr>
    <td>Setting 3</td><td>c</td>
    </tr>
<table>

设置1a
设置2b
设置3c

设置1a 设置2d 设置3c

我不确定是否要在.net中编写助手对象、使用实用程序、通过单独的XSL转换运行输出,或者做些什么考虑到我手头的工具,最好的方法是什么?

此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>
<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>

应用于以下XML文档时(制作格式良好的XML文档后提供的文档):


设置1
A.
设置2
B
设置3
C

设置1 A. 设置2 D 设置3 C
生成所需的正确结果

<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>
<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>

设置1
A.
设置2
B
设置3
C

设置1 A. 设置2 D 设置3 C
您是否要求XSLT转换将第一次转换的输出转换为新的所需格式?如果是这样的话,您能否提供一个最小但格式良好的XML文档,它是第一次转换的输出,应该是所需转换的输入?为了清晰起见,我编辑了我的示例(以显示与我提到的hr匹配的表对)。我不想上传真正的HTML,因为这是一个专有的政府项目;我相信你能理解。:)为什么不能只提供一次格式良好的XML呢?您的需求不太清楚。。可能您缺少关键规则..我的示例不太清楚,因此我在使用此样式表时没有太大成功。很抱歉。为了清晰起见,我更新了示例。@JimDagg:我已经编辑了答案。它现在处理您最新的XML文档格式并生成所需的结果。