Как мне сопоставить два отдельных числа в документе 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>
EDIT:
Я добавил приведенное ниже решение в свой код. xsl:apply-templates
, который присутствует, используется для воссоздания вложенных списков, потерянных между HTML и XML. Теперь мне нужно сопоставить PageID с идентификатором <PgIndexElementItem>
и добавить класс 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>