Как использовать Groovy XML MarkupBuilder для создания допустимых тегов HTML-сценариев?

Я использую Groovy 1.8 XML MarkupBuilder для создания HTML-страницы, которая включает в себя <script> тег.

Когда я загружаю страницу в Firefox 18, я вижу пустую страницу вместо ожидаемых результатов.

Кажется, это связано с <script> тег не имеет дополнительного </script> тег, даже если нет содержания, чтобы гарантировать </script> тег. (См.: /questions/44696130/pochemu-ne-rabotayut-samozakryivayuschiesya-tegi-skripta)

Пример Groovy кода:

def builder = new groovy.xml.MarkupBuilder( out )

builder.html {
  head {
    script( type:'text/javascript', src:'//example.com/example.js' )
  }

  body {
    p("Hello...Newman.")
  }
}

Если я проанализирую HTML (пустую) отображаемой страницы, используя Firefox "View Source Source" (Ctrl-U), я вижу:

<html>
  <head>
    <script type='text/javascript' src='//example.com/example.js />
  </head>
  <body>
    <p>Hello...Newman.</p>
  </body>
</html>

Присмотревшись, я вижу знак "/" на <script ... /> тег отображается красным цветом, а наведенный на него текст надписи '/' говорит: "Самозакрывающийся синтаксис ("/>"), используемый для непустого элемента HTML. Игнорирование косой черты и трактовка как начальный тег".

Итак, как мне создать действительный HTML <script> теги с использованием Groovy XML MarkupBuilder?

2 ответа

Решение

Если вы определите какое-то пустое содержимое, у тега script будет отдельный закрывающий тег:

script( '', type:'text/javascript', src:'//example.com/example.js' )

В качестве альтернативы вы можете использовать

script(type:'text/javascript', src:'//example.com/example.js){mkp.yield("")}

Другие вопросы по тегам