C#.NET: Change elements in a CSS file from dynamically generated HTML?
I have a C# code behind file that gets dynamically generated HTML from a server and converts it to a PDF. In the HTML there are <link rel="stylesheet">
elements that reference external stylesheets as well as many <img>
tags.
All of these files, images and stylesheets, come from www.example.com
, and I'm trying to make all elements come from static.example.com
wit开发者_StackOverflow中文版h the same url instead. I've used the obvious stringName.Replace("www.example.com","static.example.com")
to replace the elements in the HTML, but is there any way to do so for the references in the CSS file?
FOR EXAMPLE:
background-image:url('www.example.com/bg.png');
needs to become
background-image:url('static.example.com/bg.png');
in the external file.
Any ideas on approach? Creativity is welcome; I'm up for anything!
Thanks :)
Since you say "code behind file"... are you doing this in ASP.NET?
You could use String.Replace functions in the HTML code to change <link href="www.example.com/cssfile.css">
to <link href="fixcss.ashx?file=www.example.com/cssfile.css">
. Then write a fixcss.ashx to retrieve the CSS file and perform the string replacements on it.
You may use filestream to get the file and then replace by the code you have used.Other approaches are open
You may find this like helpful
CSS Parser
Reading and Parsing a CSS file
Aha, so here's an idea I had. This might be inefficient, but here's what I think I could do:
Change each <link rel="stylesheet">
into a <style> ... </style>
tag and read the file contents, replacing the external stylesheet with an embedded one.
This might be inefficient, thoughts?
Thank you!
Just for some variety (and for other folks who might be in a different environment), if you have access to the to it, you can (and should) use the URL Rewrite module. It can not only redirect (like .htaccess in PHP apps would) but also rewrite the URL in files that are served (so for example, your CSS file).
精彩评论