Пакетно найдите строку в html и добавьте текст под ней - PullRequest
0 голосов
/ 08 августа 2011

Я борюсь с этим в течение нескольких часов, но я не могу заставить его работать должным образом. Что я хочу сделать, это найти строку

<div id="content"> 

и добавьте несколько строк ниже, которые содержат некоторые переменные, такие как

<div class="post">
    <h2 class="title"><a href="#">**var**</a></h2>
    <p class="meta"><span class="date">**var**</span>
    <span class="posted">Posted by <a href="#">**var**</a></span></p>
    <div style="clear: both;">
        &nbsp;
    </div>
    <div class="entry moreless">
        **var** 
    </div>
</div>

Возможно ли это? Если так, то как?

- David

1 Ответ

2 голосов
/ 30 октября 2011

Есть гораздо лучшие инструменты, доступные для решения этой проблемы.Но это возможно с пакетом Windows!

Предположим, что текст ниже - это самый внешний файл шаблона с именем TEMPLATE.HTML.Строка триггера содержимого может иметь отступ, но это решение не позволяет использовать дополнительные символы после триггера.(Это ограничение можно было бы устранить, но это замедлило бы работу)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Sample template for building a page</title>
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
  <div id="content">
  </div>
</body>
</html>

Пример файла содержимого ниже (с именем CONTENT_HTML.TXT) содержит переменные, указанные как! VarName!и пакетный файл будет использовать отложенное расширение для выполнения подстановки переменных.Это означает, что если вы хотите, чтобы контент содержал восклицательный знак, он должен быть каким-то образом закодирован.Есть два варианта.Одним из них является использование символьной нотации HTML!Это прекрасно работает для текстового содержимого, но не будет работать, если вы хотите комментарий HTML.Для комментариев я определяю! X!переменная, которая будет расширена до!

<div class="post">
    <h2 class="title"><a href="#">!TITLE!</a></h2>
    <p class="meta"><span class="date">!DATE!</span>
    <span class="posted">Posted by <a href="#">!AUTHOR!</a></span></p>
    <div style="clear: both;">
        &nbsp;
    </div>
    <div class="entry moreless">
        Example with exclamation point&#33;<br />
        Another example with exclamation point!X!
    </div>
    <!X!--
      sample comment
    -->
</div>

Наконец, вот пакетный файл, который соберет все воедино и создаст выходной файл с именем FINAL.HTML.Я жестко закодировал значения для переменных, но их можно так же легко передать в качестве аргументов.

@echo off
setlocal enableDelayedExpansion
set X=^^^!
set TITLE=Sample HTML build
set DATE=%date%
set AUTHOR=Santa Clause
set TEMPLATE="template.html"
set CONTENT="content_html.txt"
set FINAL="final.html"

<%TEMPLATE% (
  for /f %%A in ('type %TEMPLATE%^|find /c /v ""') do (
      for /l %%N in (1 1 %%A) do (
      set "ln="
      set/p "ln="
      echo(!ln!
      set "test=!ln:*<=<!"
      if "!test!"=="<div id="content">" (
        for /f "usebackq delims=" %%L in (%CONTENT%) do echo(%%L
      )
    )
  )
)>%FINAL%

У этого решения есть некоторые ограничения

  1. Пустые строки (строкине содержит ничего, кроме пробелов) будет удален из части контента.Вероятно, не проблема с HTML.Устранение этого ограничения усложнит и замедлит решение.
  2. Строки, начинающиеся с;будет удален из части контента.Это ограничение легко снимается, но код выглядит ужасно.Он включает указание в качестве символа EOL в последнем цикле FOR / F.
  3. Файл шаблона должен использовать стандарт новой строки Windows .Файлы стиля Unix, использующие , не будут работать с этим решением.Это также может быть решено, но опять-таки это усложнит и замедлит ход событий.
  4. Как я уже говорил ранее, триггер содержимого в шаблоне может иметь начальные пробелы, но в строке не должно быть никаких завершающих символов.Снятие этого ограничения замедлит процесс.
  5. Строки ограничены 1024 символами в шаблоне
  6. Конечные управляющие символы удаляются из каждой строки в шаблоне
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...