XSL msxsl:node-set problem

前端 未结 3 1944
有刺的猬
有刺的猬 2021-01-18 22:00

Please help me out guys. I\'m just trying to declare a simple result tree fragment and iterate over it.


...


         


        
相关标签:
3条回答
  • 2021-01-18 22:29

    My suspicion is that you have a default namespace declared in your stylesheet. That would effectively place the <item-list> and <item> elements into a namespace. To select namespace-qualified elements using XPath 1.0, you must always use a prefix in the expression.

    So if you have something like this at the top of your stylesheet:

    <xsl:stylesheet xmlns="http://example.com"...>
    

    Then you'll need to also add this:

    <xsl:stylesheet xmlns="http://example.com" xmlns:x="http://example.com"...>
    

    And then use the "x" prefix in your XPath expression:

    <xsl:for-each select="msxsl:node-set($rtf)/x:item-list/x:item">
      <xsl:value-of select="@id"/>
    </xsl:for-each>
    

    Let me know if that did the trick. I'm only speculating here.

    0 讨论(0)
  • 2021-01-18 22:31

    Unlike MSXSL, XslCompiledTransform provides node-set() function where it is supposed to be - in EXSLT Common namespace:

    <xsl:stylesheet xmlns:exslt="http://exslt.org/common">
      ...
      <xsl:for-each select="exslt:node-set($rtf)/item-list/item">
      ...
    </xsl:stylesheet>
    
    0 讨论(0)
  • 2021-01-18 22:42

    This looks OK to me.

    Have you correctly declared the msxsl namespace for the extension functions though? Something like this:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    

    I am assuming you are using the Microsoft XSLT processor here

    0 讨论(0)
提交回复
热议问题