代码之家  ›  专栏  ›  技术社区  ›  CLiown

将XSL应用于外部XML

  •  12
  • CLiown  · 技术社区  · 15 年前

    目前我使用:

    <?xml-stylesheet type="text/xsl" href="XSL.xsl"?>
    

    将XSL链接到XML。

    如果我的XML在这里:www.externaldomain.com/rss.xml(在我的域之外),我如何才能使XSL链接到XML?

    我可以将XSL指向文件或链接吗?

    5 回复  |  直到 10 年前
        1
  •  2
  •   Community Mofi    7 年前

    使用“纯”XML+XSLT(*)无法实现这一点。一些外部代码将需要识别XML和应该转换它的XSLT。

    既然您似乎在转换XML,我想您是在WebBrowser中完成的。

    您可以使用javascript来完成此操作,例如 demonstrated on w3schools . 但是,如果您正在执行基于javascript的请求(即Ajax/XHR),则跨域限制仍然适用:如果发起服务器没有设置适当的CORS头文件以允许跨域javascript访问,则需要通过您自己的服务器代理该XML请求。

    (*): Mad's answer 使用实体引用将外部XML巧妙地嵌入到包含文档中。这确实值得一试,但请注意,这种基于实体的包含已经在一些信息泄漏中使用过,这就是为什么XML解析器中经常不启用它(特别是,这不应该能够在浏览器中破坏CORS)。你只需要在你的情况下尝试一下。

        2
  •  14
  •   Mads Hansen    15 年前

    可以通过实体引用创建包含远程XML文件的XML内容的本地XML文件 .

    下面的示例将为您提供 包装器 文档元素。

    然后可以在本地XML文件中包含样式表处理指令。

    但是,由于本地文件具有 包装器 文档元素,您可能需要指向使用 XSL:导入 导入原始xsl.xsl和 应用模板 从中的内容开始 包装器 元素。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wrapper [
    <!ENTITY content SYSTEM "http://stackoverflow.com/feeds">
    ]>
    <?xml-stylesheet type="text/xsl" href="XSL.xsl" ?>
    <wrapper>
        &content;
    </wrapper>
    
        3
  •  3
  •   marc_s Anurag    15 年前

    如果您试图在.NET中运行XSLT,可以轻松地使用.NET中的xslcompiledTransform类来实现这一点。

    如果您试图在命令行上运行它,您可以使用许多工具将XSLT文件应用于给定的XML文件,通常是本地硬盘上的一个。

    参见Oleg Tkachenko的网站 info on NXSLT 以及其他的XSLT工具,或者看到这个 CodeProject article 对于Windows Shell扩展,将XSLT应用于给定的XML文件(在本地硬盘上)。

    希望这有点帮助。

    马克

        4
  •  2
  •   Name    14 年前

    您可以编写一个本地XML文件作为包装:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="XSL.xsl" ?>
    <wrapper Source="http://www.externaldomain.com/rss.xml"/>
    

    并扩展样式表,使其了解包装器:

    <xsl:template match="wrapper">
      <xsl:apply-templates select="document(./@Source)"/>
    </xsl:template>
    

    我还没有通过HTTP对XML文件进行测试,但是它可以与本地XML文件一起使用,我不想更改这些文件来包含XML样式表处理指令。它适用于麻省理工学院的Firefox、Opera和IE(7,我没有尝试过其他版本)

        5
  •  0
  •   Aditya Bajaj    11 年前

    一种解决方案: 将外部XML获取到一个xmldocument对象中,然后插入一个包含xsl的include语句的节点。包含XSL可以从 http://tipscow.com/how-to-include-xsl-in-xml/ .