Каков правильный синтаксис для использования HTML-компоновщика со смешанным содержимым в Groovy 1.7? - PullRequest
5 голосов
/ 20 марта 2010

На странице Groovy с примером приведен пример использования Groovy HTML Builder со смешанным содержимым:

p [
        "This is some",
        b"mixed",
        "text. For more see the",
        ahref:'http://groovy.codehaus.org' ["Groovy"],
        "project"
  ]

Это, однако, не работает для меня, я получаю сообщение об ошибке вроде:

expecting ']', found 'mixed' @ line 33, column 23. b"mixed", ^ 1 error 

Пример страницы Groovy гласит:

[Примечание: синтаксис в некоторых из них примеры немного устарели. Увидеть Глава 8 GINA в то же время пока эти примеры не будут обновлены.]

Поэтому я подозреваю, что синтаксис компоновщика HTML изменился, однако у меня нет книги, поэтому я не могу проверить и не могу найти какой-либо соответствующий пример этой работы в Интернете. Кто-нибудь знает, как синтаксис должен быть в Groovy 1.7 и получил ли это работать?

Ответы [ 3 ]

9 голосов
/ 21 марта 2010

Я обнаружил, что многие вещи в этом примере устарели. Синтаксис для смешанных ссылок и [] вокруг абзаца не работает для меня.

Для смешанного контента вам необходимо использовать специальное ключевое слово «mkp.yield». Существует также mkp.yieldUnescaped, если вы не хотите убегать. Есть и другие функции, которые вы можете делать с mkp.

Этот пример работает и показывает использование смешанного контента:

def builder = new groovy.xml.MarkupBuilder()
builder.html {     
  head {         
    title"XML encoding with Groovy"     
  }     
  body {
    h1"XML encoding with Groovy"   
    p"this format can be used as an alternative markup to XML"      

    a(href:'http://groovy.codehaus.org', "Groovy")

    p {     
      mkp.yield "This is some"
      b"mixed"   
      mkp.yield " text. For more see the"
      a(href:'http://groovy.codehaus.org', "Groovy")
      mkp.yield "project"    
    }      
    p "some text"    
  } 
}​

Выход:

<html>
  <head>
    <title>XML encoding with Groovy</title>
  </head>
  <body>
    <h1>XML encoding with Groovy</h1>
    <p>this format can be used as an alternative markup to XML</p>
    <a href='http://groovy.codehaus.org'>Groovy</a>
    <p>This is some
      <b>mixed</b> text. For more see the
      <a href='http://groovy.codehaus.org'>Groovy</a>project
    </p>
    <p>some text</p>
  </body>
</html>
1 голос
/ 03 мая 2012

Это

p() {
    "This is some"
    "mixed"
    "text. For more see the"
    a(href:'http://groovy.codehaus.org', "Groovy")
    "project"
}

Не делает то, что вы хотите. Закрытие выполняется, но сами строки при выполнении просто оцениваются, и все - они никуда не уходят. 'a', с другой стороны, является вызовом метода, который оценивается в контексте вновь созданного узла 'p'.

1 голос
/ 08 июля 2010

Я думаю, что это работает лучше: -

def writer = new StringWriter()  
    def builder = new groovy.xml.MarkupBuilder(writer)
    builder.html {
        head {
            title"Report"
        }
        body {
            h1"XML encoding with Groovy"
            p"this format can be used as an alternative markup to XML"

            // an element with attributes and text content /
            a(href:'http://groovy.codehaus.org', "Groovy")

            // mixed content /
            p() {
                "This is some"
                "mixed"
                "text. For more see the"
                a(href:'http://groovy.codehaus.org', "Groovy")
                "project"
            }
            p "some text"
        }
    }

Результат: -

<html>
  <head>
    <title>Report</title>
  </head>
  <body>
    <h1>XML encoding with Groovy</h1>
    <p>this format can be used as an alternative markup to XML</p>
    <a href='http://groovy.codehaus.org'>Groovy</a>
    <p>
      <a href='http://groovy.codehaus.org'>Groovy</a>
    </p>
    <p>some text</p>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...