2015-07-13 3 views
0

Мне нужно выяснить, как извлечь узел с его предками. Например, если значение «Spine чрескожной Вмешательствы» и отображениеXSLT, получить узел с его предками

<mdCategoryMapping> 
     <mdCategory title="Cerebrovascular" order="20"> 
     <mdCategory title="Endovascular Surgical Neuroradiology" order="230"> 
      <mdCategory title="Aneurysms and Subarachnoid Hemorrhage" order="2310" /> 
      <mdCategory title="Brain Arteriovenous Malformations" order="2320" /> 
      <mdCategory title="Cranial Dural Arteriovenous Shunts" order="2330" /> 
      <mdCategory title="Head and Neck Vascular Lesions" order="2340" /> 
      <mdCategory title="Pediatric Vascular Interventions" order="2350" /> 
      <mdCategory title="Spine Percutaneous Interventions" order="2360" /> 
      <mdCategory title="Spine Vascular Interventions" order="2365" /> 
      <mdCategory title="Stroke" order="2370" /> 
      <mdCategory title="Trauma" order="2380" /> 
      <mdCategory title="Tumors" order="2390" /> 
     </mdCategory> 
     </mdCategory> 
    </mdCategoryMapping> 

мне нужен следующий результат:

<mdCategory title="Cerebrovascular" order="20"> 
    <mdCategory title="Endovascular Surgical Neuroradiology" order="230"> 
     <mdCategory title="Spine Percutaneous Interventions" order="2360" /> 
    </mdCategory> 
</mdCategory> 

Конечно следующее только дает мне самую низкую категорию уровня, когда $ следующему -cat равен «Чрескожные вмешательства позвоночника».

<xsl:copy-of select="//enes:metaInfo/enes:mdCategoryMapping//enes:mdCategory[@title = $next-cat]" /> 

Результат:

<mdCategory title="Spine Percutaneous Interventions" order="2360" /> 

Точно так же, когда $ следующего кот равен "Цереброваскулярный" Я получаю целое дерево со всеми дочерними узлами.

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

+0

Можете ли вы отправьте свой полный XSLT. –

ответ

1

Если вы знаете, как выбрать элемент, который вы заинтересованы в или элементы, которые вы заинтересованы в, то вы можете выбрать их, выберите их предков и убедитесь, что ваши шаблоны просто скопировать эти узлы:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:param name="next-cat" select="'Spine Percutaneous Interventions'"/> 

<xsl:strip-space elements="*"/> 
<xsl:output indent="yes"/> 

<xsl:variable name="selected-cat" select="//mdCategory[@title = $next-cat]"/> 
<xsl:variable name="subtree" select="$selected-cat/ancestor-or-self::*"/> 

<xsl:template match="/"> 
    <xsl:apply-templates select="$subtree[2]"/> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:copy/> 
</xsl:template> 

<xsl:template match="*[. intersect $subtree]"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* , node()[. intersect $subtree]"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

Я не мог заставить выше работать, поэтому я создал элементы в своем XSLT. – kalinma

+0

Я получил это, чтобы работать! Благодарю. – kalinma

Смежные вопросы