我想如何做一個字符串查找和如何解析逗號分隔字符串分別。不過,我想知道是否有一種有效的方法來滿足這兩個要求。下面是我的源XML:XSLT如何用逗號分隔的字符串查找值?
<?xml version="1.0" ?>
<MATRIX>
<DATA_RECORD>
<COMPONENT1>1, 2</COMPONENT1>
<COMPONENT2>6, 7, 8, 9</COMPONENT2>
</DATA_RECORD>
</MATRIX>
我希望通過解析逗號分隔字符串,並使用每個令牌做一個查找生成以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<MATRIX>
<DATA_RECORD>
<COMPONENT1>A, B</COMPONENT1>
<COMPONENT2>F, G, H, I</COMPONENT2>
</DATA_RECORD>
</MATRIX>
這裏是我的查找XML( COMPONENT_LOOKUPLIST.xml):
<?xml version="1.0" ?>
<MAIN>
<DATA_RECORD>
<COMPONENT_ID>1</COMPONENT_ID>
<COMPONENT_NAME>A</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>2</COMPONENT_ID>
<COMPONENT_NAME>B</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>3</COMPONENT_ID>
<COMPONENT_NAME>C</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>4</COMPONENT_ID>
<COMPONENT_NAME>D</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>5</COMPONENT_ID>
<COMPONENT_NAME>E</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>6</COMPONENT_ID>
<COMPONENT_NAME>F</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>7</COMPONENT_ID>
<COMPONENT_NAME>G</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>8</COMPONENT_ID>
<COMPONENT_NAME>H</COMPONENT_NAME>
</DATA_RECORD>
<DATA_RECORD>
<COMPONENT_ID>9</COMPONENT_ID>
<COMPONENT_NAME>I</COMPONENT_NAME>
</DATA_RECORD>
</MAIN>
我是XSLT的初學者。一些XSLT專家可以分享一些想法或提供示例代碼嗎?我接到了傑尼網站的令牌代碼:
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimiter" select="','" />
<xsl:choose>
<xsl:when test="$delimiter and contains($string, $delimiter)">
<token>
<xsl:value-of select="substring-before($string, $delimiter)" />
</token>
<xsl:call-template name="tokenize">
<xsl:with-param name="string"
select="substring-after($string, $delimiter)" />
<xsl:with-param name="delimiter" select="$delimiter" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<token><xsl:value-of select="$string" /></token>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="/MATRIX/DATA_RECORD/COMPONENT1"></xsl:with-param>
</xsl:call-template>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="/MATRIX/DATA_RECORD/COMPONENT2"></xsl:with-param>
</xsl:call-template>
,並寫了一個查詢:
<xsl:variable name="lookup" select="document('COMPONENT_LOOKUPLIST.xml')/MAIN/DATA_RECORD"/>
<xsl:for-each select="//DATA_RECORD">
<token>
<xsl:for-each select="*">
<xsl:value-of select="$lookup[COMPONENT_ID = current()]/COMPONENT_NAME"/>
</xsl:for-each>
</token>
</xsl:for-each>
但似乎具有挑戰性的這兩個結合在一起。
謝謝。
您希望我們爲您做好工作嗎? – BenjiWiebe
您使用的是什麼版本的XSLT,以及什麼處理器? – JLRishe