我想出了如何进行字符串查找以及如何分别解析逗号分隔的字符串。但是我想知道是否有一种有效的方法可以同时满足这两个要求。这是我的源 XML:
<?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 专家可以分享一些想法或提供示例代码吗?我从 Jeni 的网站获得了令牌代码:
<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>
但是将这两者结合在一起似乎具有挑战性。
谢谢你。