1
我一直在想這個我們有一段時間,但沒有運氣。xsl:for-each循環的屬性與參數匹配
我有一個專門針對具有特定屬性的節點的每個循環,但不知何故每個條件似乎並沒有工作。
我有以下XML
<?xml version="1.0" encoding="UTF-8"?>
<application-template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<config>
<env value="testing">
<subEnv value="env">
<group value="group2s">
<group value="group2as">
<prop value="group2Props">group2PropValues</prop>
</group>
</group>
</subEnv>
<subEnv value="misc1">
<group value="group2s">
<group value="group2as">
<prop value="group2Props">group2sPropValues</prop>
</group>
</group>
<group value="group2s1">
<group value="group2as1">
<prop value="group2Props">group2s1PropValues</prop>
</group>
</group>
</subEnv>
</env>
<env value="testingA">
<subEnv value="env">
<group value="test2">
<group value="test2a">
<group value="test2ab">
<prop value="group2Props">testingAGroup2PropValues</prop>
</group>
</group>
</group>
</env>
</config>
</application-template>
具有以下XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:param name="inputEnv"/>
<xsl:variable name="env" select="/application-template/config/env[@value=$inputEnv]"/>
<xsl:strip-space elements="*"/>
<xsl:output method="text" indent="no"/>
<xsl:template match="/">
<xsl:call-template name="ou">
<xsl:with-param name="subEnvPos" select="$env/subEnv"/>
<xsl:with-param name="subEnvValue" select="$env/subEnv/@value"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="ou">
<xsl:param name="subEnvPos"/>
<xsl:param name="subEnvValue"/>
<xsl:variable name="test" select="/application-template/config/env[@value=$inputEnv]/subEnv[@value=$subEnvValue]"/>
<xsl:for-each select="$test/group">
testing1:<xsl:value-of select="$test"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
帕拉姆inputEnv是 「測試」 和帕拉姆$ subEnvValue是 「ENV」。我得到的輸出是
testing1:group2PropValues testing1:group2PropValues testing1:group2PropValues testing1:group2PropValues
但我想只是循環一次,因爲條件是要匹配subenv節點= $ subEnvValue(其是「env」)。我希望的輸出是
testing1:group2PropValues
@ user2387761,請*更新*的問題 - 這是很難理解此評論。 –
對不起...我是一個新手在這裏,我試圖添加更多的代碼的意見,但我似乎無法正確格式化新的代碼。所以,我更新了原始的XML。我正在考慮進一步......即在 xsl:for-each>之後,我喜歡回到ou模板來處理下一個。另外,我喜歡做的另一件事是給予「inputEnv」,它將處理由$ inputEnv指定的節點(由外部提供) –
user2387761
@ user2387761,如果你解釋得很好(在問題中)什麼是最好的正是你想從給定的XML文檔產生,以及轉換應該實現的規則/約束是什麼。我99%確定,一旦我們知道你想達到什麼目標,那麼就可以找到更短,更簡單,更優雅的解決方案。 –