标签: markupbuilder

检测Groovy每个{}闭包内的第一个和最后一个项目

我正在使用Groovy的方便的MarkupBuilder从各种源数据构建HTML页面.

我正在努力做的一件事是构建一个HTML表并将不同的样式类应用于第一行和最后一行.这可能是最好的例子......

table() {
  thead() {
    tr(){
      th('class':'l name', 'name')
      th('class':'type', 'type')
      th('description')
    }
  }
  tbody() {
    // Add a row to the table for each item in myList
    myList.each {
      tr('class' : '????????') {
        td('class':'l name', it.name)
        td('class':'type', it.type)
        td(it.description)
      }
    }
  }   
}
Run Code Online (Sandbox Code Playgroud)

在本<tbody>节中,我想<tr>根据当前项目myList是第一项还是最后一项来将元素的类设置为不同的类.

是否有一个很好的Groovy-ified方法来做到这一点,而不是使用手动来检查项目索引与列表大小使用类似的东西eachWithIndex{}

html groovy closures markupbuilder

28
推荐指数
2
解决办法
1万
查看次数

如何使用Groovy MarkupBuilder插入xml注释?

我想用Groovy MarkupBuilder在我的xml文档中插入注释.这怎么可能?

xml groovy markupbuilder

14
推荐指数
1
解决办法
2702
查看次数

使用Groovy中的XML MarkupBuilder动态添加多个XML元素/容器

我正在尝试使用Groovy MarkupBuilder生成XML.

所需的XML是这种形式(简化):

<Order>
  <StoreID />
  <City />
  <Items>
    <Item>
      <ItemCode />
      <UnitPrice />
      <Quantity />
    </Item>
  </Items>
</Order>
Run Code Online (Sandbox Code Playgroud)

数据存储在Excel文件中,易于访问.我的Groovy脚本解析Excel并生成XML.

例如

import groovy.xml.*
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)

xml.Order{
  StoreID("Store1")
  City("New York")
  Items(){
    Item(){
      ItemCode("LED_TV")
      UnitPrice("800.00")
      Quantity("2")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

"items"中可以有多个"item"容器.

我的问题是:假设我们要生成包含10个项目的Order XML.有没有办法在"items"容器中写一个类似for循环的东西?这样,我们就不需要为10个不同的项目编写MarkupBuilder代码.

有一个类似的问题将动态元素和属性添加到groovy MarkupBuilder或StreamingMarkupBuilder.但它没有讨论循环.

xml groovy markupbuilder

11
推荐指数
1
解决办法
8517
查看次数

将动态元素和属性添加到groovy MarkupBuilder或StreamingMarkupBuilder

我已经看到很多使用Groovy MarkupBuilder构建XML文档的例子,但它们似乎都对文档中的每个元素使用静态属性(属性名称在编译时都是已知的).如果我正在尝试构建一个XML文档,其中在运行时之前不知道属性名称,该怎么办?我还没有想出解决这样的问题的语法要求.

xml groovy markupbuilder

10
推荐指数
1
解决办法
4667
查看次数

如何使用Groovy XML MarkupBuilder创建有效的HTML脚本标记?

我正在使用Groovy 1.8 XML MarkupBuilder来构建包含<script>标记的HTML页面.

当我在Firefox 18中加载页面时,我看到一个空白页而不是预期的结果.

这似乎是由于生成的<script>标签没有补充</script>标签,即使没有内容可以保证</script>标签.(参见:https://stackoverflow.com/questions/69913/why-dont-self-closing-script-tags-work)

样本Groovy代码:

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

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

  body {
    p("Hello...Newman.")
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用Firefox的"查看页面源"(Ctrl-U)检查(空白)呈现页面的HTML,我看到:

<html>
  <head>
    <script type='text/javascript' src='//example.com/example.js />
  </head>
  <body>
    <p>Hello...Newman.</p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

仔细观察,我看到<script ... />标签上的'/' 呈现为红色,'/'上的悬停文本表示在非空HTML元素上使用的"自闭语法("/>").忽略斜线和处理作为开始标记."

那么,如何<script>使用Groovy XML MarkupBuilder 生成有效的HTML 标记?

html xml markup groovy markupbuilder

6
推荐指数
1
解决办法
5301
查看次数

在Groovy MarkupBuilder中使用命名空间

我想要以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<structure:structuralDataRoot xmlns:register="http://www.test.ch/register/1" xmlns:structure="http://test.ch/structure/1" >
  <structure:tester>ZH</structure:tester>
  <structure:surveyYear>2001</structure:surveyYear>
  <structure:surfaceData>
    <structure:houseSurfaceData>
      <structure:creationDate>2001-01-01</structure:creationDate>
      <structure:localFarmId>
        <register:houseIdCategory>token</register:houseIdCategory>
        <register:houseId>token</register:houseId>
      </structure:localFarmId>
    </structure:houseSurfaceData>
  </structure>
Run Code Online (Sandbox Code Playgroud)

我可以将命名空间添加到xml中,如下所示:

xml.records('xmlns:structure' :"http://test.ch/structure/1" ...
Run Code Online (Sandbox Code Playgroud)

但是我如何为xml元素创建名称空间前缀?我找到的唯一解决方案是:

tester('xmlns:structure' :"http://test.ch/structure/1", 'ZH')
Run Code Online (Sandbox Code Playgroud)

但这给了我以下输出:

<tester xmlns:structure='http://test.ch/structure/1'>ZH</tester>
Run Code Online (Sandbox Code Playgroud)

它的语法是正确的,但是当你有很多节点时阅读并不好.

groovy namespaces markupbuilder

5
推荐指数
1
解决办法
6196
查看次数

Groovy MarkupBuilder名称冲突

我有这个代码:

String buildCatalog(Catalog catalog) {
    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)
    xml.catalog(xmlns:'http://www.sybrium.com/XMLSchema/NodeCatalog') {
        'identity'() {
            groupId(catalog.groupId)
            artifactId(catalog.artifactId)
            version(catalog.version)
        }
    }

    return writer.toString();
}
Run Code Online (Sandbox Code Playgroud)

它产生这个xml:

<catalog xmlns='http://www.sybrium.com/XMLSchema/NodeCatalog'>
  <groupId>sample.group</groupId>
  <artifactId>sample-artifact</artifactId>
  <version>1.0.0</version>
</catalog>
Run Code Online (Sandbox Code Playgroud)

请注意,"身份"标签丢失了...我已经尝试了世界上的所有内容来显示该节点.我正在撕开我的头发!

提前致谢.

groovy markupbuilder

5
推荐指数
1
解决办法
1314
查看次数

Groovy:将XML元素从一个doc复制到另一个doc

我是Groovy的新手,我遇到了一个简单的问题.我想做的就是从一个XML文件中提取某些元素并用它创建一个新文件.这是一个示例XML,让我们使用Maven pom文件:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.group</groupId>
  <artifactId>artifact</artifactId>
  <version>1.4</version>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
 </dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

我知道如何在Groovy中解析XML:

def project = new XmlParser().parse("pom.xml")
project.groupId.each{
  println it.text()
}
Run Code Online (Sandbox Code Playgroud)

我也知道如何在Groovy中创建XML:

def xml = new groovy.xml.MarkupBuilder()
xml.project (){
  modelVersion("artifactId")
  groupId("com.group")
  artifactId("artifact")
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎把这两者结合起来有问题.例如,我想要使用groupId,artifactId和整个依赖树,并从中创建一个新的XML.它不是那么难,我想利用Groovy的简单性.

沿着这些方向的东西(当然这不起作用):

def newXml= new groovy.xml.MarkupBuilder()
newXml.groupId= project.groupId
newXml.dependencies = project.dependencyManagement.dependencies
Run Code Online (Sandbox Code Playgroud)

谢谢.该代码有很多帮助,但我如何处理命名空间,即输入中的项目标记如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
Run Code Online (Sandbox Code Playgroud)

然后它会在输出中添加一些奇怪的注释.我想要的只是输出中的项目标签也是如此.

xml groovy markupbuilder xml-parsing

3
推荐指数
1
解决办法
3027
查看次数

使用"envelop"创建groovy xml - 在xml结构的中间添加节点

(对不起奇怪的标题......)

我想使用groovy构建器系统来创建一个xml.

我的问题是,我希望有一些信封,用户不必关心.

一个例子:

def builder = new groovy.xml.MarkupBuilder()
builder.foo() {
     bar('hello')
}
Run Code Online (Sandbox Code Playgroud)

这应该创造让我们说

<Something id:'123'>
    <AnyInfo>
        <foo>
            <bar>hello</bar>
        </foo>
    </AnyInfo>
</Something>
Run Code Online (Sandbox Code Playgroud)

这样在后台有一个xml结构,用户可以在预定义的节点上添加他的xml结构(例如'AnyInfo')

构建器的外观如何,我可以在信封中间的某处添加带有markupbuilder(或任何其他构建器)的节点?

我希望这在某种程度上是可以理解的?!

谢谢马蒂

xml groovy builder markupbuilder

2
推荐指数
1
解决办法
1541
查看次数

如何使用MarkupBuilder将xml写入文件

我在groovy中使用MarkupBuilder创建了一个xml但是如何将它写入我的项目目录中的xml文件中 E:\tomcat 5.5\webapps\csm\include\xml

def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)
    String[] splitted

    xml.rows()
    {   for(int i=0;i<lines.length-1;i++){
            row()
            {
                for(int j=0;j<lines[i].length();j++)
                {
                     splitted= lines[i].split(',');
                }
                name(splitted[0])
                email(splitted[1])

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里println writer.toString()打印我的整个xml内容,但我需要它在我的tomcat项目xml目录中的文件中

java xml groovy markupbuilder

2
推荐指数
2
解决办法
4876
查看次数

Grails:使用变量创建XML节点

我似乎无法弄清楚如何创建非硬编码的节点.例:

def aval = "someValue" 
def xml = new MarkupBuilder()

xml.outTag(attr: aval)   // outTag is hardcoded
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我不知道节点的名称怎么办(就像在我的例子中,如果我想让outTag成为变量怎么办).当我读取目录/文件并从中创建XML时,我正在使用它.谢谢.

xml grails groovy markupbuilder

2
推荐指数
1
解决办法
2533
查看次数

Groovy MarkupBuilder - 不会产生原始文本

我有以下大量代码用于写出一系列按钮元素,包含图标和文本:

def tagcloud = { attrs, body ->

    def mb = new MarkupBuilder(out)

    mb.ul('class': 'list-inline') {
        def tag = it
        attrs.tags.split(",").each {
            li {
                button('class': 'btn btn-default', 'type': 'submit') {
                    i('class': 'fa fa-tag', '')
                    mb.yield('test')
                }
            }   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现在使用yield函数时,标记生成器将yield调用作为我的html中的标记输出,而不是原始文本:

<li>
    <button class="btn btn-default" type="submit">
      <i class="fa fa-tag"></i>
      <yield>test</yield>
    </button>
</li>
Run Code Online (Sandbox Code Playgroud)

基于我的研究,这是推荐的方法:使用Groovy MarkupBuilder的HTML,如何优雅地混合标签和文本?

有谁知道为什么这个文字被包裹喜欢这个?

我使用的是Grails 2.3.8.

html grails groovy taglib markupbuilder

2
推荐指数
1
解决办法
1164
查看次数

如何快速打印groovy.util.slurpersupport.Node?

是否有一种简单的方法将a转换groovy.util.slurpersupport.Nodegroovy.util.Node

我试图XmlNodePrinter在一个节点上使用,来XmlSlurper进行一些快速调试.这是我的代码(可能不是最优雅的):

def xml = new XmlSlurper().parse( new File( path + pomFile ) )
def services = xml.build.plugins.plugin.configuration.services
services.children().findAll{ it.artifactId.text() == serviceName }.each { config ->

    // begin section to dump "config" for debugging
    def stringWriter = new StringWriter()
    new XmlNodePrinter(new PrintWriter(stringWriter)).print(config[0])
    println stringWriter.toString()
    // end section to dump "config" for debugging

    // do some other processing on the config node
}
Run Code Online (Sandbox Code Playgroud)

这会抛出以下内容config[0]:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'groovy.util.slurpersupport.Node@14712c3' with class …
Run Code Online (Sandbox Code Playgroud)

xml groovy markupbuilder

0
推荐指数
1
解决办法
3254
查看次数

标签 统计

groovy ×13

markupbuilder ×13

xml ×9

html ×3

grails ×2

builder ×1

closures ×1

java ×1

markup ×1

namespaces ×1

taglib ×1

xml-parsing ×1