Получить локальное имя текущего узла в XSL - PullRequest
0 голосов
/ 14 мая 2010

Вот структура моего XML

<FileRoot>
    <UserSet1>
         <User>
            <FirstName></FirstName>
            <LastName></LastName>
         </User>
         <User>
            <FirstName></FirstName>
            <LastName></LastName>
         </User>
         ...
    </UserSet1>
    <InactiveUsers>
         <User>
            <FirstName></FirstName>
            <LastName></LastName>
         </User>
         <User>
            <FirstName></FirstName>
            <LastName></LastName>
         </User>
         ...
    </InactiveUsers>
</FileRoot>

В моем шаблоне XSL

<xsl:template match="/*/*">
   <File>
      <xsl attribute name="Name">
          <xsl:value-of select="local-name(/*/*)"/>
      </xsl:attribute>
   </File>
</xsl>

После преобразования для UserSet1 и InactiveUsers дал мне "UserSet1". Ожидаемые результаты должны быть «UserSet1» для UserSet1 и «InactiveUsers» для InactiveUsers. Как правильно получить значение?

Спасибо

1 Ответ

2 голосов
/ 14 мая 2010

/*/* - это абсолютный путь, поэтому local-name(/*/*) всегда будет возвращать локальное имя для первого узла во всем документе, который соответствует этому абсолютному пути. Похоже, вы хотите локальное имя текущего узла. В этом случае используйте local-name(). Если аргумент не указан, используется текущий узел контекста.

Также вы можете использовать шаблон значения атрибута вместо xsl:attribute, как показано ниже:

<xsl:template match="/*/*">
   <File Name="{local-name()}"/>
</xsl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...