xslt를 사용하여 xml 파일에서 정보를 추출하려고합니다. xslt 수학 함수를 사용하여 반복되는 일부 동작의 시작과 끝 시간의 차이를 출력했습니다. 그러나 나는 다음 액션의 시작 시간과 이전 액션의 종료 시간의 차이점을 어떻게 풀어 낼 수 있을지 확신 할 수 없다. 내가 아는 한 xslt에서 변수를 재 할당 할 수 없습니다. 기존 언어에서는 변수로 만난 마지막 시간을 저장합니다. 더 관용적 인 xslt 방식으로이 작업을 수행하는 방법에 대한 조언을 해 줄 수있는 사람이 있다면 가장 감사 할 것입니다.XSLT를 사용하여 차이 계산
다음은 데이터 파일의 단순화 된 버전입니다.
<Actions>
<Action>
<Start>1</Start>
<End>10</End>
</Action>
<Action>
<Start>13</Start>
<End>16</End>
</Action>
<Action>
<Start>20</Start>
<End>24</End>
</Action>
</Actions>
이것은 내 현재 동작이 내부적으로 다른 xslt 변환입니다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="text" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:for-each select="Actions/Action">
<xsl:value-of select="End - Start" /><xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
내가보고 싶은 결과는
9
3
3
4
4
무엇에 대한 당신의 좋아하는 주제는 성능에 대한 고려입니까? –
@KirillPolishchuk :이 솔루션이 효율적이지 않다는 것을 암시하는 경우 귀하의 주장을 제공해주십시오. 이 솔루션은 매우 효율적이며 스트리밍 (또는 게으른 평가) 모드에서도 수행 될 수 있다고 생각합니다. 최적화를 수행하지 않고'$ vValues [k]'를 평가하기 위해 O (N)을 사용하는 XSLT 프로세서의 경우,'$ vValues'를 모든 값이 형제 요소에 포함 된 다른 문서로 변환 한 다음 각각에 대해 요소에'position()> 1' 출력'을 붙여라. - preceding-sibling :: * [1]'. 이 처리에는 O (N)이 필요합니다. 이 일반적인 솔루션은 다양한 문서 구조에 적용됩니다. –