为什么我无法使用 C# 从此 XSL 脚本获取链接的 CSS 文件列表?

问题描述 投票:0回答:1

这是我的 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();
   }

但是结果列表是空的。为什么?

c# css xslt-1.0 linq-to-xml
1个回答
0
投票

注意 XSL 中的默认 xml 命名空间声明

xmlns="http://www.w3.org/1999/xhtml"

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

您在检索它们时需要包含该内容。

XNamespace ns = "http://www.w3.org/1999/xhtml";
var cssLinks = document.Descendants(ns + "link"); 
© www.soinside.com 2019 - 2024. All rights reserved.