Получить исходный код из HTML-файла - PullRequest
0 голосов
/ 22 сентября 2011

Мне интересно, не могли бы вы помочь с созданием файла .cpp / .h из следующего HTML-файла программным способом (используя любой язык сценариев или язык программирования, или даже используя редакторы, такие как vi или emacs): 1001 *

<!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 ]

8 голосов
/ 22 сентября 2011

Это у вас работает?

[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@~]$

Edit:

Для обратного направления. Если вы используете vim в качестве редактора, вы можете ввести :TOhtml для генерации выделенного синтаксиса HTML-версии вашего кода в новом буфере. Он генерирует HTML на основе вашей схемы цветов vim. Чтобы изменить цветовую схему, используйте команду :colorscheme <name>.

2 голосов
/ 22 сентября 2011

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 
  };
1 голос
/ 22 сентября 2011

Другой вариант перехода от 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
        };
1 голос
/ 22 сентября 2011

Вы можете использовать регулярные выражения для ...

  • ... сохранять только то, что находится в <body> HTML-страницы,
  • ... вырезать весь HTMLтеги (все, что выглядит как <.*>, должно быть удалено из файла).
  • ... unescape специальные символы, такие как &lt;, &gt;, &amp; и т. д.

То, что осталось, должно быть кодом, который вы ищете.

0 голосов
/ 22 сентября 2011

Если вы пытаетесь удалить все HTML-теги, чтобы получить исходный, невыделенный исходный код, у вас есть два варианта, о которых я могу подумать:

  1. Анализ дерева DOMи просто захватите весь соответствующий текст.
  2. Используйте некоторые регулярные выражения, чтобы удалить сами теги.Например, может быть, "s ///" было бы хорошим началом?
0 голосов
/ 22 сентября 2011
  • Исправить HTML. Вам не хватает некоторых закрывающих тегов.
  • Получить PHP
    • Получить кодовый блок pre с помощью DOMDocument
    • strip_tags() от результата
  • Прибыль.
...