2009-10-12 8 views
1

у меня есть следующий XML, который является результатом Runnig XSLT:XSLT - активировать функцию XPath в XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<toc xmlns:fn="http://www.w3.org/2004/07/xpath-functions" label="Sample Table of Contents"> 
    <topic label="Title1" href="Ref1#ref1"> 
     <topic label="Title 2" href="Ref2#ref2"> 
      <topic label="Title3" href="Ref3#ref3"/> 
      <topic label="Title4" href="Ref4#ref4"/> 
     </topic> 
     <topic label="Title5" href="Ref5#ref5"/> 
    </topic> 
    <topic label="Title6" href="Ref6#ref6"/> 
</toc> 

и следующий XSLT, который производит этот XML:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="D:\Documents and Settings\oshecht\Desktop\XSL\Copy of toc.xml"?> 
<?altova_samplexml D:\Documents and Settings\oshecht\Desktop\XSL\Copy of toc.xml?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2004/07/xpath-functions"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="BODY"> 
     <toc label="Sample Table of Contents"> 
      <xsl:apply-templates select="UL/LI/OBJECT"/> 
     </toc> 
    </xsl:template> 
    <xsl:template match="OBJECT"> 
     <topic label="{param[@name='Name']/@value}" href="{param[@name='Local']/@value}"> 
      <xsl:apply-templates select="following-sibling::UL/LI/OBJECT"/> 
     </topic> 
    </xsl:template> 
</xsl:stylesheet> 

я хочу что в выходной XML я буду иметь в:

follwing:

- в той же строке, но вместо HREF = "REF1 # ref1" иметь:

HREF = "Ref1" - устранить все после "#"

я знаю о функции подстроки-раньше (REF1 # ref1, '#'), но как я могу активировать его из своего XSLT?

не могли бы вы посоветуете?

+1

Это было фактически разрешено в комментариях к исходному вопросу - зачем спрашивать еще раз? http://stackoverflow.com/questions/1553575/xslt-how-to-parse-xml-with-recursive-elements-to-eclipse-toc-xml/1553615#1553615 – Tomalak

+0

Я добавил вопрос ниже ... синтаксис didnt работает, я hetting «недействительный xpath» – orly

ответ

0

Вы можете обернуть выражение XPATH выбора @value внутри шаблона значения атрибута для @href, который позволит получить результат вызова функции для значения @href:

<xsl:template match="OBJECT"> 
    <topic label="{param[@name='Name']/@value}" href="{substring-before(param[@name='Local']/@value, '#')}"> 
      <xsl:apply-templates select="following-sibling::UL/LI/OBJECT"/> 
    </topic> 
</xsl:template> 

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

<xsl:template match="OBJECT"> 
    <topic label="{param[@name='Name']/@value}"> 
      <xsl:attribute name="href"> 
       <xsl:value-of select="substring-before(param[@name='Local']/@value, '#')" /> 
      </xsl:attribute> 
      <xsl:apply-templates select="following-sibling::UL/LI/OBJECT"/> 
    </topic> 
</xsl:template> 
+0

Спасибо вам :) это сработало. – orly

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