代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

为什么我不能使用C#从这个XSL脚本中获得链接的CSS文件列表?

  •  0
  • Andrew Truckle  · 技术社区  · 8 月前

    以下是我的XSL文件:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
        <xsl:output method="html" indent="yes" version="4.01"
          doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
          doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
        <xsl:param name="CSSFile1"></xsl:param>
        <xsl:template match="/">
            <html xmlns="http://www.w3.org/1999/xhtml">
                <xsl:choose>
                    <xsl:when test="//Settings/ForeignGroupMode=1">
                        <xsl:attribute name="lang">
                            <xsl:value-of select="//Settings/ForeignGroupLanguageCode"/>
                        </xsl:attribute>
                        <xsl:attribute name="dir">
                            <xsl:value-of select="//Settings/ForeignGroupDirection"/>
                        </xsl:attribute>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:attribute name="lang">
                            <xsl:value-of select="//Settings/LanguageCode"/>
                        </xsl:attribute>
                        <xsl:attribute name="dir">
                            <xsl:value-of select="//Settings/Direction"/>
                        </xsl:attribute>
                    </xsl:otherwise>
                </xsl:choose>
                <head>
                    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
                    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
                    <xsl:choose>
                        <xsl:when test="$CSSFile1 !=''">
                            <style type="text/css">
                                <xsl:value-of select="$CSSFile1"/>
                            </style>
                        </xsl:when>
                        <xsl:otherwise>
                            <link rel="stylesheet" type="text/css" href="Workbook-S-140-Legacy.css"/>
                        </xsl:otherwise>
                    </xsl:choose>
                    <title>
                        <xsl:value-of select="//Labels/Congregation"/>&#160;<xsl:value-of select="//Labels/Title" />
                    </title>
                </head>
                <body>
                </body>
            </html>
        </xsl:template>
    
    

    它有CSS链接,例如:

    <link rel="stylesheet" type="text/css" href="Workbook-S-140-Legacy.css"/>
    

    我试着写一个C#例程,给我一个所有链接的CSS文件的列表:

       public string[] GetLinkedCssFilesList(string xslFilePath)
       {
           XDocument document = XDocument.Load(xslFilePath);
           List<string> cssFiles = new List<string>();
    
           var cssLinks = document.Descendants("link");
           foreach(var css in  cssLinks)
           {
               cssFiles.Add(css.Attribute("href").Value);
           }
    
           return cssFiles.ToArray();
       }
    

    但是生成的列表是空的。为什么?

    1 回复  |  直到 8 月前
        1
  •  1
  •   Andrew Truckle    8 月前

    请注意默认的xml命名空间声明 xmlns="http://www.w3.org/1999/xhtml" 在XSL中。

    这意味着 link 元素属于 http://www.w3.org/1999/xhtml xml命名空间。

    在检索它们时,您需要包括那个。

    XNamespace ns = "http://www.w3.org/1999/xhtml";
    var cssLinks = document.Descendants(ns + "link");