小编Boo*_*eoo的帖子

使用groovy将ISO-8859-1转换为UTF-8

我需要将ISO-8859-1文件转换为utf-8编码,而不会丢失内容的修改......

我有一个看起来像这样的文件:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
Run Code Online (Sandbox Code Playgroud)

我不想将其编码为UTF-8.我试过以下:

f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1')
ts=new String(f.getBytes("UTF-8"), "UTF-8")
g=new File('c:/temp/myutf8.xml').write(ts)
Run Code Online (Sandbox Code Playgroud)

由于String不兼容而无法正常工作.然后我读了一些关于bytestreamreaders/writers/streamingmarkupbuilder和其他的东西......

然后我试过了

f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1')
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"

new OutputStreamWriter(new FileOutputStream('c:/temp/myutf8.xml'),'utf-8') << mb.bind {
    mkp.xmlDeclaration()
    out << f
}
Run Code Online (Sandbox Code Playgroud)

这完全不是我想要的......

我只想用ISO-8859-1读取器获取xml读取的内容,然后将其放入一个新的(旧)文件中......为什么这么复杂: - /

结果应该是,并且文件应该在utf-8中真正编码:

<?xml version="1.0" encoding="UTF-8" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何答案干杯

groovy encoding utf-8 iso-8859-1

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

创建自己的groovy库

有没有人知道为groovy创建自己的库的最佳方法.

我有几种方法,我不想复制并粘贴到我所有的groovy脚本中.

完美的解决方案是通过一个

import myownmethods
Run Code Online (Sandbox Code Playgroud)

如何创建库myownmethods.jar?

感谢您的任何答案和解决方案

干杯

groovy jar

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

教程XML Parser Groovy命名空间处理

我发现了XmlParser().parseText(...)的这个supergroovy函数.

它没有命名空间对我工作正常...现在我有以下XML(SoapRequest):

<?xml version="1.0" encoding="UTF-8"?>
   <soap:Envelope xmlns:soap="http://xxx" xmlns:xsd="http://xxy" 
     xmlns:xsi="http://xxz">
       <soap:Body>
         <MG_Input xmlns="http://yxx">
            <Accnr>001</Accnr> 
            [...]
Run Code Online (Sandbox Code Playgroud)

我的目标是通过XmlParser获得Accnr.我认为它可以这样工作:

input = new File('c:/temp/03102890.xml-out')

def soapns = new groovy.xml.Namespace("http://xxx",'soap')
def xsdns = new groovy.xml.Namespace("http://xxy")
def xsins = new groovy.xml.Namespace("http://xxz")
def ordns = new groovy.xml.Namespace("http://yxx")



xml = new XmlParser().parseText(input.getText())
println xml[soapns.Envelope][soapns.Body][ordns.MG_Input][Accnr][0].text()
Run Code Online (Sandbox Code Playgroud)

但这并没有真正起作用......

有谁知道如何处理这个'简单'?我只是不能使用谷歌的例子......

xml groovy parsing namespaces

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

Groovy:用\替换/在路径中

你会如何/\Groovy 替换?这就 "//10.1.1.1/temp/test"变成了"\\10.1.1.1\temp\test".

"//10.1.1.1/temp/test".replaceAll(/'\\/'/,'\\')< - ?不起作用

有没有人有想法?

谢谢你的回答.

groovy escaping slash backslash

4
推荐指数
1
解决办法
9087
查看次数

真正删除XMLParser Object Groovy中的节点

如何通过XMLParser真正删除节点:

 x='''<X>
<A>
 <B c3='1'>
   <C1>a</C1>
   <C2>b</C2>
 </B>
 <B c3='2'>
   <C1>e</C1>
   <C2>e</C2>
 </B>
 <B c3='3'>
   <C1>f</C1>
   <C2>f</C2>
 </B>
</A>
</X>
'''

xml=new XmlParser().parseText(x)
def nodeToDel=xml.A.B.find{it.@C1='a'}
xml.remove(nodeToDel)
println xml
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)
Run Code Online (Sandbox Code Playgroud)

似乎工作但是!!!! 当我把它翻译成我的问题时,它仍然保存原来的xml althoguh在运行remove-method后返回true.

我google了一下,发现了这个BUG.似乎我现在受到了影响.我怎么解决呢?是否有解决方法,或者我必须回到根源并开始按行复制它?groovy真的是ungroovy在这里: - /

编辑:如下所示,并从中获得经验,不可能以这种方式删除等于'e'的标签.只会移除第一个记录.我认为xml格式存在问题.没有所需的格式:

<A x='1' y='2'></A>

并以格式

<A> <x>1</x> <y>2</y> </A>

有人能够重现这个错误吗?

edit2:我使用的是GroovyConsole 1.8.0.在示例中添加了c3属性.试图用相同的方法删除它,相同的bug:第一个B部分被删除...现在最令人印象深刻的错误:尝试与其他代码:

def xml=new XmlParser().parseText(x)
xml.A.remove(xml.A.B.find{it.@'c3'= '3'}) //want to remove third section
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)
Run Code Online (Sandbox Code Playgroud)

结果是第一部分属性c3变为3?!?!?!?!?WTF ...

我现在试图找到一个星期的解决方案,这非常令人筋疲力尽......

有人有点想法吗?

xml groovy xml-parsing

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