2015-05-28 6 views
0

У меня есть контент DITA.xslt 2.0 проверяет, ссылается ли элемент на несколько других элементов в одной папке

Карта Дита выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" 
"../dtd/technicalContent/dtd/map.dtd"> 
<map id="e7de5b"> 
    <title/> 
    <topicmeta> 
     <othermeta name="title" content="File Loader Guide for SAP HANA"/> 
     <othermeta name="status" content="Authoring:closed"/> 
    </topicmeta> 
    <topicref href="9df1475208c.xml"/> 
    <mapref href="ec152470.ditamap"/> 
</map> 

В этой папке, я знаю, что это главная карта, поскольку он ссылается на единственную другую карту DITA (<mapref href="ec152470.ditamap"/>). Базисно, основная карта папки - это карта, на которую не ссылается никакая другая карта в той же папке (может быть любое количество карт).

У меня есть файл, который содержит список всех карт, как это:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<maps> 
<map path="Path\ToTheMap" name="e7de5b.ditamap" /> 
<map path="Path\ToTheMap" name="ec152470.ditamap" /> 
</maps> 

Какой самый лучший способ проверить, если карта является основной карте в папке, я. е. проверить, ссылается ли на нее другая карта в той же папке?

До сих пор я получил:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fo fn xs"> 

<xsl:output method="xml" encoding="utf-8" standalone="yes"/> 

<xsl:template match="/"> 
    <docMaps> 
     <xsl:apply-templates/> 
    </docMaps> 
</xsl:template> 

<xsl:template match="maps"> 

    <xsl:for-each-group select="map" group-by="@path"> 
     <xsl:choose> 
      <xsl:when test="count(current-group()) = 1"> 
       <mapdoc path="{current-grouping-key()}" name="{@name}"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <!-- check --> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:for-each-group> 
</xsl:template> 

</xsl:stylesheet> 

Если есть только одна карта в папке, это тривиально. Но в другом случае ... я пробовал - каждый цикл, но я не могу понять это.

Любая помощь высоко оценена!

ответ

0

Основная карта папки - это карта, на которую не ссылается никакая другая карта в той же папке (может быть любое количество карт).

Это звучит для меня как

select="maps/map[not(doc(@path)/map/mapref/@href = $name)]/@name" 
+0

Спасибо за ответ! Я буду работать, чем в свой код в ближайшие дни, и посмотреть, не сделал ли это трюк. – user3813234