2014-04-02 9 views
0

Я хочу вывести некоторые узлы. И некоторые из них определяются как целевые узлы. Некоторые из них являются исходными узлами.XSLT: определить идентификатор узла

Input, как

<?xml version="1.0" encoding="UTF-8"?> 
<Element type="node" id="Node-a" name="a"/> 
<Element type="node" id="Node-b" name="b"/> 
<Element type="node" id="Node-c" name="c"/> 
...... 

Сначала я попробовал этот

<source node id="{generate-id()}"/> 
<target node id="{generate-id()}"/> 

Он может выводить все узлы. Но проблема в том, что есть двойные узлы.

Так что я попытался как этот

<source node id="{generate-id(@source)}"/> 
<target node id="{generate-id(@target)}"/> 

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

Я хочу спросить, как определить правильный идентификатор узла, а затем я могу их разделить. Или я должен определить некоторые переменные? Пожалуйста, помогите мне. Благодарю.

+0

Что делает ваш вход выглядеть? – PhillyNJ

+0

Эй, Фил, ему это нравится. – Kathi

+2

"* Некоторые из них определены как целевые узлы. Некоторые из них являются исходными узлами. *« Где именно это определение найдено? –

ответ

0

Во-первых,

это не действует:

<source node id="{generate-id()}"/> 

атрибут node должен иметь значение.

Чтобы ответить на ваш вопрос, я бы использовал функции generate-id и position() на элементе target, чтобы получить уникальный идентификатор. Что-то вроде этого. Так как я не имею хороший входной документ, я создал образец:

<data> 
    <Element type="node" id="Node-a" name="a"/> 
    <Element type="node" id="Node-b" name="b"/> 
    <Element type="node" id="Node-c" name="c"/> 
</data> 

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="html" indent="yes"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="data"> 
      <xsl:copy> 
       <xsl:apply-templates/> 
      </xsl:copy> 
     </xsl:for-each> 
    </xsl:template> 
    <xsl:template match="Element"> 
     <xsl:element name="source"> 
      <xsl:attribute name="node"> 
       <xsl:value-of select="@type"/> 
      </xsl:attribute> 
      <xsl:attribute name="id"> 
       <xsl:value-of select="generate-id(.)"/> 
      </xsl:attribute> 
     </xsl:element> 
     <xsl:element name="target"> 
      <xsl:attribute name="node"> 
       <xsl:value-of select="@type"/> 
      </xsl:attribute> 
      <xsl:attribute name="id"> 
       <xsl:value-of select="concat(generate-id(.), '-', position())"/> 
      </xsl:attribute> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Большое спасибо, Фил. – Kathi

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