2012-11-29 59 views
0

我想使用xslt從xml創建一個html列表()。我能夠使用xml 文件和xslt 文件來完成此操作。 Now我想用xml 字符串XmlDocument和and xslt 文件使用XslCompiledTransform獲取html作爲字符串。結果爲空

這是我當前的代碼:

private String toHTML(XmlDocument xmlDocument) 
     { 
      System.IO.StringWriter sw = new System.IO.StringWriter(); 
      XslCompiledTransform xslTrans = new XslCompiledTransform(); 
      xslTrans.Load(Server.MapPath("Xslt/Permisos.xslt")); 
      xslTrans.Transform(xmlDocument.CreateNavigator(), new XsltArgumentList(), sw); 
      return sw.ToString(); 
     } 

這是一個Web應用程序組件。 不會引發異常。只是返回「」。

我的XSLT

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 

     <xsl:output method="html" indent="yes"/> 
     <xsl:template match="/"> 
     <xsl:for-each select="menus"> 
      <ul> 
      <xsl:for-each select="menu"> 
       <li> 
       <a href="{url}"> 
        <xsl:value-of select="nombre" /> 
       </a> 
       <ul> 
        <xsl:for-each select="submenu"> 
        <li> 
         <a href="{url}"> 
         <xsl:value-of select="nombre" /> 
         </a> 
        </li> 
        </xsl:for-each> 
       </ul> 
       </li> 
      </xsl:for-each> 
      </ul> 
     </xsl:for-each> 
     </xsl:template> 
    </xsl:stylesheet> 

我的XML

<?xml version="1.0" encoding="UTF-8"?><menus xmlns="http://www.xxxxx.com"><menu><nombre>Main</nombre><url>#</url><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu><submenu><nombre>Sub</nombre><url>#</url></submenu></menu></menus> 

謝謝!

回答

1

another SO answer所述。問題是您在源XML中定義了一個命名空間(「http://www.xxxxx.com」),但是您不使用xslt中的命名空間。

您可以從源XML中刪除命名空間或在XSLT指定:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl" 
    xmlns:my="http://www.xxxxx.com"> 

    <xsl:output method="html" indent="yes"/> 
    <xsl:template match="/"> 
    <xsl:for-each select="my:menus"> 
     <ul> 
     <xsl:for-each select="my:menu"> 
      <li> 
      <a href="{my:url}"> 
       <xsl:value-of select="my:nombre" /> 
      </a> 
      <ul> 
       <xsl:for-each select="my:submenu"> 
       <li> 
        <a href="{my:url}"> 
        <xsl:value-of select="my:nombre" /> 
        </a> 
       </li> 
       </xsl:for-each> 
      </ul> 
      </li> 
     </xsl:for-each> 
     </ul> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

它的工作!謝謝你brianpeiris! – Carlos

相關問題