2012-02-24 3 views
0

항공기 운영자를위한 비행 계획을 개발하는 소프트웨어를 개발 중입니다. 항공기에는 다양한 설정을 조정할 수있는 센서가 있으며 이러한 설정은 비행 계획의 "세그먼트"라고 불리는 방식으로 분할됩니다. 세그먼트는 계획에서 일정한 시간 동안 만 발생하며 센서 설정은 세그먼트 간을 이동할 때만 변경됩니다.굵게 표시된 XSLT 출력의 변경된 요소 표시

비행 계획은 직렬화 된 XML 객체의 XSL 변환에서 생성 된 HTML 파일로 출력됩니다 , C# .NET의 XslCompiledTransform을 통해. 조정할 설정의 수가 제한되어 있기 때문에 구조가 매우 일관됩니다. 각 세그먼트에 대해 <hr /> 태그로 구분 된 한 쌍의 표가 출력됩니다.

내가 할 수 있기를 원하는 것은 출력을 가져오고 세그먼트마다 설정이 변경 될 때마다 <b> 태그로 묶어서 최종 출력의 설정 텍스트를 굵게 표시하는 것입니다. A (의역) 예 :

<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 출력 변환을 감안할 때 (는 설명 위해 편집),이 같은 결과 대담 그것에 또는 태그에서 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> 

.Net에서 도우미 객체를 쓰거나, 유틸리티를 사용하거나, 별도의 XSL 변환을 통해 출력을 실행하거나, 무엇을해야할지 모르겠습니다. 내가 갖고있는 도구를 고려할 때 가장 좋은 방법은 무엇일까요?

+0

첫 번째 변환의 출력을 새로운 원하는 형식으로 변환하기 위해 XSLT 변환을 요청합니까? 그렇다면 첫 번째 변환의 결과물이고 원하는 변환의 입력이어야하는 잘 형성된 최소한의 XML 문서를 제공 할 수 있습니까? –

+0

명확성을 위해 예제를 편집했습니다 (언급 된 시간과 일치하는 테이블 쌍을 보여주기 위해). 독점적 인 정부 프로젝트이므로 실제 HTML을 업로드하고 싶지 않습니다. 이해한다고 확신합니다. :) –

+0

왜 * 잘 구성된 * XML을 제공 할 수 없습니까? –

답변

1

이 XSLT 1.0 변환 다음 XML 문서 적용

<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 문서) :

<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 문서 형식을 처리하고 원하는 결과를 생성합니다. –