从html文件中获取源代码

时间:2011-09-21 22:50:51

标签: html syntax-highlighting

我想知道您是否可以请求帮助以编程方式从以下html文件生成.cpp / .h文件(使用任何脚本语言,编程语言,甚至使用vi或emacs等编辑器): / p>

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Class</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body link="blue" vlink="purple" bgcolor="#FFFABB" text="black">

<h2><font face="Helvetica">Code Fragment: Class</font></h2>
</center><br><dl><dd><pre>

  <font color=#A000A0>template</font> &lt;<font color=#A000A0>typename</font> G&gt;
  <font color=#A000A0>class</font> Components : <font color=#A000A0>public</font> DFS&lt;G&gt; {            <font color=#0000FF>// count components</font>
  <font color=#A000A0>private</font>:
    <font color=#A000A0>int</font> nComponents;                 <font color=#0000FF>// num of components</font>
  <font color=#A000A0>public</font>:
    <font color=#000000>Components</font>(<font color=#A000A0>const</font> G& g): DFS&lt;G&gt;(g) {}        <font color=#0000FF>// constructor</font>
    <font color=#A000A0>int</font> <font color=#A000A0>operator</font>()();                 <font color=#0000FF>// count components</font>
  };
</dl>

</body>
</html>

如果你能指出如何在另一个方向上做到这一点,那就太好了。非常感谢。

6 个答案:

答案 0 :(得分:8)

这对你有用吗?

[18:56:44 jaidev@~]$ lynx --dump foo.html
Code Fragment: Class


  template <typename G>
  class Components : public DFS<G> {            // count components
  private:
    int nComponents;                 // num of components
  public:
    Components(const G& g): DFS<G>(g) {}        // constructor
    int operator()();                 // count components
  };
[18:56:49 jaidev@~]$

修改

反方向。如果您使用vim作为编辑器,则可以输入:TOhtml以在新缓冲区中生成突出显示HTML代码的语法。它会根据你的vim colorscheme生成一个html。要更改colorscheme,请使用:colorscheme <name>命令。

答案 1 :(得分:2)

PHP脚本:

$doc = new DOMDocument();
$doc->loadHTMLFile("file.html");
$xpath = new DOMXpath($doc);
$str = '';
foreach ($xpath->query("//dl//text()") as $node) {
    $str .= $node->nodeValue . ' ';
}

file_put_contents('file.cpp', $str);

file.cpp的内容:

   template  < typename  G>
   class  Components :  public  DFS<G> {             // count components 
   private :
     int  nComponents;                  // num of components 
   public :
     Components ( const  G& g): DFS<G>(g) {}         // constructor 
     int   operator ()();                  // count components 
  };

答案 2 :(得分:1)

你可以使用正则表达式......

  • ...仅保留HTML页面<body>中的内容
  • ...删除所有HTML标记(应该从文件中删除看起来像<.*>的所有内容)。
  • ... unescape特殊字符,例如&lt;&gt;&amp;等。

剩下的应该是您正在寻找的代码。

答案 3 :(得分:1)

从HTML到源代码的另一个选择是html2text实用程序,它经常被安装在许多Linux发行版中。

matteo@teomint:~/Desktop$ html2text out.html 
***** Code Fragment: Class *****


        template <typename G>
        class Components : public DFS<G> {            // count components
        private:
          int nComponents;                 // num of components
        public:
          Components(const G& g): DFS<G>(g) {}        // constructor
          int operator()();                 // count components
        };

答案 4 :(得分:0)

  • 修复HTML。你错过了一些结束标签。
  • 获取PHP
    • 使用pre
    • 获取DOMDocument代码块
    • strip_tags()来自结果
  • 利润。

答案 5 :(得分:0)

如果您尝试剥离所有HTML标记以取回原始的非突出显示的源代码,那么您有两个我能想到的选项:

  1. 解析DOM树,然后抓取所有相关文本。
  2. 使用一些正则表达式自行删除标记。例如,也许“s ///”会是一个好的开始吗?