1
我有以下XSL,用於將Oracle SQL開發人員的XML格式轉換爲DBUnit期望的「完整」XML格式(用於創建用於測試的數據集)。在XSLT轉換中獲取第一個孩子
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="java"
xmlns:dbutil="com.jason.util.DatabaseTestUtil">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:text disable-output-escaping="yes"><dataset></xsl:text>
<xsl:text>
</xsl:text>
<xsl:text disable-output-escaping="yes"><table name=""></xsl:text>
<xsl:text>
</xsl:text>
<xsl:for-each select="RESULTS/ROW">
<xsl:for-each select="COLUMN">
<xsl:text disable-output-escaping="yes"><column></xsl:text>
<xsl:value-of select="@NAME" />
<xsl:text disable-output-escaping="yes"></column></xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="RESULTS">
<xsl:for-each select="ROW">
<xsl:text disable-output-escaping="yes"><row></xsl:text>
<xsl:for-each select="COLUMN">
<xsl:text disable-output-escaping="yes"><value descriptor="</xsl:text>
<xsl:value-of select="@NAME"/>
<xsl:text disable-output-escaping="yes">"></xsl:text>
<xsl:choose>
<xsl:when test="@NAME='NAME'">
<xsl:value-of select="dbutil:generateRandomName()" />
</xsl:when>
<xsl:when test="@NAME='MEMBER_SSN'">
<xsl:value-of select="dbutil:generateRandomSsn()" />
</xsl:when>
<xsl:when test="@NAME='SPOUSE_SSN'">
<xsl:variable name="spouseSsn">
<xsl:value-of select="." />
</xsl:variable>
<xsl:if test="dbutil:hasSpouseSsn($spouseSsn)"><xsl:value-of select="dbutil:generateRandomSsn()" /></xsl:if>
</xsl:when>
<xsl:when test="@NAME=E_MAIL_ADDRESS">
<xsl:text>[email protected]</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="." />
</xsl:otherwise>
</xsl:choose>
<xsl:text disable-output-escaping="yes"></value></xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:text disable-output-escaping="yes"></row></xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
<xsl:text disable-output-escaping="yes"></table></xsl:text>
<xsl:text>
</xsl:text>
<xsl:text disable-output-escaping="yes"></dataset></xsl:text>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
我打電話給一些「後端」java,以便我的測試集中沒有嵌入人員的私人信息。
不幸的是,通過/ RESULTS/ROW的第一個循環應該只是通過/ RESULT/ROW的第一個子列的循環。
誰能告訴我怎麼去說第一個孩子?
你的XSLT看起來可怕。如果你需要創建一個結果元素,你可以簡單地使用一個文字結果元素,例如'的 ... XSL:模板>',沒有必要使用禁用輸出漏出。至於訪問第一個孩子,如果你使用'/ RESULT/ROW [1]',你只選擇第一個'ROW'孩子。或者'/ RESULT/ROW/* [1]'會選擇根目錄RESULT的所有ROW子元素的第一個子元素。 –
2013-04-09 17:19:02
它可能是醜陋的,但它的工作原理。我最終創建了一個名爲firstChild的變量,並將RESULTS/ROW [1]放入其中,並對其進行迭代。 – Jason 2013-04-09 17:33:51
爲什麼您手動構建使用'<數據集>'的所有標籤?這幾乎完全違背了使用XSLT的目的。 – JLRishe 2013-04-09 17:56:12