如何匹配XML文档中的两个单独数字?我的XML文档中有多个<PgIndexElementInfo>
元素,每个元素代表一个不同的导航元素,每个元素都有一个唯一的<ID>
。在文档的后面,<PageID>
指定的数字有时与上面使用的<ID>
匹配。我怎样才能将<PageID>
与上面指定的<ID>
进行匹配?
<Element>
<Content>
<PgIndexElementInfo>
<ElementData>
<Items>
<PgIndexElementItem>
<ID>1455917</ID>
</PgIndexElementItem>
</Items>
</ElementData>
</PgIndexElementInfo>
</Content>
</Element>
<Element>
<Content>
<CustomElementInfo>
<PageID>1455917</PageID>
</CustomElementInfo>
</Content>
</Element>
编辑:
我将以下解决方案添加到我的代码中。存在的xsl:apply-templates
用于重新创建在HTML和XML之间丢失的嵌套列表。我现在需要做的是将PageID与<PgIndexElementItem>
的ID匹配,并将CSS类添加到它所属的<ul>
。我希望这是有道理的。
<xsl:key name="kIDByValue" match="ID" use="."/>
<xsl:template match="PageID[key('kIDByValue',.)]">
<xsl:apply-templates select="//PgIndexElementItem[not(contains(Description, '.'))]" />
</xsl:template>
<xsl:template match="PgIndexElementItem">
<li>
<a href="{ResolvedURL/Absolute}"><xsl:value-of select="Title"/></a>
<xsl:variable name="prefix" select="concat(Description, '.')"/>
<xsl:variable name="childOptions"
select="../PgIndexElementItem[starts-with(Description, $prefix)
and not(contains(substring-after(Description, $prefix), '.'))]"/>
<xsl:if test="$childOptions">
<ul>
<xsl:apply-templates select="$childOptions" />
</ul>
</xsl:if>
</li>
</xsl:template>
答案 0 :(得分:3)
处理交叉引用的XSLT方法是使用键。
匹配:与PageID
元素引用的每个ID
元素匹配的规则。
<xsl:key name="kIDByValue" match="ID" use="."/>
<xsl:template match="PageID[key('kIDByValue',.)]">
<!-- Template content -->
</xsl:template>
选择:选择具有特定值的每个PageID
元素的表达式。
<xsl:key name="kPageIDByValue" match="PageID" use="."/>
<xsl:template match="ID">
<xsl:apply-templates select="key('kPageIDByValue',.)"/>
</xsl:template>