플랫폼 : 색슨 9 - XSLT 2.0정렬 XML 요소 순서 XSLT 기반에 외부 문서에 지정된 순서
나는 정기적으로 편집, 업데이트 및 저장해야 3000의 XML 문서를 가지고있다.
프로세스의 일부에는 편집 전에 저장소에서 문서를 체크 아웃하고 편집이 완료되면 정기적으로 게시하는 것이 포함됩니다.
각 문서에는 개별적으로 명명 된 섹션이 있습니다. , 기초 텍스트 요소 내에서
<part>
<meta>
<place_id>12345</place_id>
<place_name>London</place_name>
<country_id>GB</country_id>
<country_name>United Kingdom</country_name>
</meta>
<text>
<docs>some blurb</docs>
<airport>some blurb LGW LHR</airport>
<trains>some blurb</trains>
<hotels>some blurb</hotels>
<health>some blurb</health>
<attractions>some blurb</attractions>
</text>
</part>
은 거의 100 개의 단원으로 구성되어 있습니다, 모든 편집 팀과, 그들은 가끔의 기본 설정 순서에 마음을 변경할 수 있지만 일반. 어쩌면 일년에 두 번.
현재 편집자 및 게시자를 위해 XML 문서 섹션을 현재 편집자의 편집자에게 제시합니다. 이 순서는 'stdhdg.xml'라는 동적으로 생성 된 외부 문서에 지정된,이 같은 나타납니다 :
<hdgs>
<hdg name="docs" newsort="10"/>
<hdg name="airport" newsort="30"/>
<hdg name="trains" newsort="20"/>
<hdg name="hotels" newsort="40"/>
<hdg name="health" newsort="60"/>
<hdg name="attractions" newsort="50"/>
</hdgs>
선호하는 정렬 순서가 HDG/@ newsort에 의해 지정됩니다.
그래서 나는 올바른 순서
<xsl:template match="text">
<xsl:variable name="thetext" select="."/>
<xsl:variable name="stdhead" select="document('stdhdg.xml')"/>
<text>
<xsl:for-each select="$stdhead//hdg">
<xsl:sort data-type="number" order="ascending" select="@newsort"/>
<xsl:variable name="tagname" select="@name"/>
<xsl:variable name="thisnode" select="$thetext/*[local-name() = $tagname]"/>
<xsl:apply-templates select="$thisnode"/>
</xsl:for-each>
</text>
</xsl:template>
에서 처리하기 위해 다음과 같이 템플릿을 사용하지만 매우 느리고 성가신 보인다 나는 그것을 속도를 높이기 위해 키를 사용되어야한다고 생각합니다.
이 정렬 작업을 더 간단하게/더 깔끔하게 처리 할 수있는 방법이 있습니까?
(방법을 편집자의 편집을 변경 부탁하지 마십시오. 그건 내 삶의 가치보다 더)
TIA
Feargal
좋은 질문, +1. 모든 편집을하기 전에 다시 정렬해야 할 필요성을 완전히 없애주는 솔루션에 대한 내 대답을 확인하십시오. :) –