XSLT сопоставляет PAGEID с идентификатором элемента - PullRequest
0 голосов
/ 25 января 2011

Как мне сопоставить два отдельных числа в документе 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>

1 Ответ

3 голосов
/ 25 января 2011

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...