2013-02-19 6 views
0

У меня есть переменная prdxml XSL, который держит в XML, как этотВыберите значение из корневого узла в XSLT

<node id="2939" parentID="2938" level="3" writerID="0" > 
    <data alias="itemNumbers">,3101056,8261247,</data> 
    <data alias="pass_word">akspass</data> 
    <data alias="logo">/media/41532/inner-logo01.png</data> 
</node> 

Как выбрать идентификатор (ID = «2939»), который находится в корневом узле с этой переменной

ответ

2

Это похоже на структуру XML узла Umbraco (pre-v4.5).

Чтобы получить доступ к любому из атрибутов узла Umbraco, вы можете использовать @ символ следующим образом:

<xsl:value-of select="$prdxml/@id" /> 
<xsl:value-of select="$prdxml/@parentID" /> 

Чтобы получить доступ к свойствам определенных вами на узле Umbraco, вы будете использовать что-то вроде этого :

<xsl:value-of select="$prdxml/data[@alias='pass_word']" />  
<xsl:value-of select="$prdxml/data[@alias='logo']" /> 

Umbraco имеет целую серию в своей вики здесь; http://our.umbraco.org/wiki/reference/xslt; с примерами о том, как пересечь их XML с помощью XPATH.



- редактировать обращаться комментарии -

рабочая версия моего XSLT является:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets"> 

<xsl:output method="html" omit-xml-declaration="yes"/> 

<xsl:param name="currentPage"/> 

<xsl:template match="/"> 
    Current Page ID : <xsl:value-of select="$currentPage/@id" /> 
</xsl:template> 

</xsl:stylesheet> 

Возможные причины, почему это может не отображаться на вашей странице может до:

  • <xsl:param name="currentPage" /> удален из вашего XSLT.
  • XSLT не связан с макросом.
  • Макрос не показан на шаблоне.
  • Шаблон не назначен вашему Узлу.
  • Узел не опубликован.
+0

Вы были прав насчет umbraco. Но код не работает для меня. Любая идея? – Athul

+1

Как вы получаете исходный XML? Можем ли мы увидеть декларацию '$ prdxml'? –

+0

На самом деле его элемент текущей страницы в umbraco.I просто отменил его здесь как prdxml для тех, кто не знаком с umbraco. – Athul

2

Я думаю, вы используете XSLT 1.0.

Чтобы сделать что-то подобное, вам нужно полагаться на функцию расширения node-set(). Но поскольку это функция расширения, ее доступность зависит от используемого вами XSLT-процессора.

Например, в xsltproc, Саксон вы могли бы использовать что-то вроде:

<xsl:stylesheet xmlns:exsl="http://exslt.org/common" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       version="1.0"> 

    <xsl:variable name="_prdxml"> 
     <node id="2939" parentID="2938" level="3" writerID="0" > 
      <data alias="itemNumbers">,3101056,8261247,</data> 
      <data alias="pass_word">akspass</data> 
      <data alias="logo">/media/41532/inner-logo01.png</data> 
     </node> 
    </xsl:variable> 

    <xsl:template match="/"> 
     <xsl:variable name="prdxml" select="exsl:node-set($_prdxml)" /> 
     <!-- Now you can navigate through the prdxml node set --> 
     <xsl:apply-templates select="$prdxml/node[@id = '2939']" /> 
    </xsl:template> 

</xsl:stylesheet> 

Если вы используете процессор Microsoft XSLT вы должны изменить пространство имен функций расширения для

xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
Смежные вопросы