我不確定爲什麼這個applly-templates不起作用,我在我的XSL文件中調用了一個模板來搜索元素以獲得答案「 YES「然後繼續使用另一個模板,但這是它結束的地方,因爲我似乎無法獲得下一個模板。 (使用XSLT 1.0)如何應用 - 使用子字符串搜索匹配節點的兄弟節點的模板
示例XML(這是從更大的XML摘錄只是告訴你的點)
<Properties>
...
<benCut_1__1_ formula="">Yes</benCut_1__1_>
<CTRRad_1__2_ formula="">Yes</CTRRad_1__2_>
<CBlRad_1__2_ formula="">Yes</CBlRad_1__2_>
<CBRRad_1__2_ formula="">Yes</CBRRad_1__2_>
<CTLRad_1__2_ formula="">Yes</CTLRad_1__2_>
<CBlRad_1__3_ formula="">Yes</CBlRad_1__3_>
<CBRRad_1__3_ formula="">Yes</CBRRad_1__3_>
<CTLRad_1__3_ formula="">Yes</CTLRad_1__3_>
<CTRRad_1__3_ formula="">Yes</CTRRad_1__3_>
<bencut_1__2_ formula="">Yes</bencut_1__2_>
<benCut_2__1_ formula="">Yes</benCut_2__1_>
<benCutH_2__1_ formula="">21mm</benCutH_2__1_>
<benCutW_2__1_ formula="">21mm</benCutW_2__1_>
<benCutx_2__1_ formula="">21mm</benCutx_2__1_>
<benCutY_2__1_ formula="">21mm</benCutY_2__1_>
<benCTR_2__1_ formula="">21mm</benCTR_2__1_>
<benCTl_2__1_ formula="">21mm</benCTl_2__1_>
...
</Properties>
首先我適用模板來搜索任何的「benCut_」的或「bencut_」的結果是數據出現不同的情況(這個問題與這個問題是分開的)。
<xsl:template match="Properties" >
<xsl:apply-templates select="*[contains(translate(name(),'BENCUT','bencut'),'bencut_')]" />
</xsl:template>
然後,我需要運行的下一個應用模板到任何一個有值「是」的「bencut_」,並查找字符串(最後6個字符創建一個匹配字符串的結尾發現在XML其他值,我需要提取作爲一個羣體和現在不同
<xsl:template match="*[contains(translate(name(),'BENCUT','bencut'),'bencut_')]" >
<xsl:if test="text()='Yes'">
<xsl:apply-templates select="following-sibling::*[contains(name(),substring(name(),string-length(name())-5))]" />
</xsl:if>
</xsl:template>
這是它開始失敗,因爲我需要檢查「bencut_」節點包含相同的尾兄弟姐妹字符串,他們可以在前面或後面 (我刪除了我原來選擇的'以下兄弟:: [contains(name(),su bstring(name(),string-length(name()) - 5))]前同步:: [包含(名稱(),子串(名稱(),字符串長度(名稱()) - 5)]''嘗試和調試代碼)
[也真的不確定爲什麼「|」在另一種情況下工作時,「和」如果任何人都不會有解釋]
這是我最後的模板,我將要運行,這將是格式化我發現每個其他兄弟姐妹看起來和呈現像。
<xsl:template match="following-sibling::*[contains(name(),substring(name(),string-length(name())-5))]" >
<xsl:value-of select="name()" />
</xsl:template>
最終的結果是要找到所有例如匹配的尾巴「_1__2_」,並能看到下面的數據在考慮之類的東西CTRRad_1__2_是摳圖右上半徑。
摳圖(1)第(2)節; 右上半徑 - 是 左下半徑 - 是 開孔高度 - 21毫米 切面寬度 - 21毫米 ...
會有1-3節1-11缺口,即33個可能的缺口塊。
你忘了提供從改造所需的結果。請提供。 –
@Dimitre - 提供了示例,我想讀取所有* _1__2_元素,每個元素都以不同的部分開頭,所以當我看到CTRRad時會出現「CTRRad_1__2_」和「CTLRad_1__2_」*我想再運行另一個將它改爲「Cutout Top Right Radius」,它會識別模板的部分字符串,讓我陷入困境,剩下的我可以自己做,所以如果您可以循環所有匹配的「_1__2_」和所有的「_1__3_」等,然後仍然能夠看到名稱()的開始,以確定下一部分。 –
@Alastair,如果您在問題中提供了所有內容,則可以使其成爲最容易的幫助,並在必要時對其進行編輯。如果你從字面上提供你期望的片段作爲結果,它會比散文解釋更有幫助(儘管這可能會增加更多相關信息) –