我有简单的xml文件,我需要在管道中进行解析。
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<AS Name="123">
<Config Name="Configuration1">
<Servers>
<Server Name="server1"/>
<Server Name="server2"/>
<Server Name="server3"/>
<Server Name="server4"/>
</Servers>
</Config>
</AS>
我需要提取所有服务器的值&#39;名称变成变量。 所以我使用下面的代码,但只得到&#34;未分类的字段java.lang.string配置&#34;例外
deleteDir()
stage("upload") {
def inputFile = input message: 'Upload file', parameters: [file(name: 'parameters.xml')]
new hudson.FilePath(new File("$workspace/parameters.xml")).copyFrom(inputFile)
inputFile.delete()
}
stage ("parse")
{
def xml = readFile "${env.WORKSPACE}/parameters.xml"
def config = new XmlParser().parseText(xml)
config.Config.Servers.Server.each{
println it.@Name
}
}
XMLSlurper也没有帮助。 我做错了什么?
UPD:使用noncps重写管道,但它没有给出结果
node
{
deleteDir()
stage("upload") {
def inputFile = input message: 'Upload file', parameters: [file(name: 'parameters.xml')]
new hudson.FilePath(new File("$workspace/parameters.xml")).copyFrom(inputFile)
inputFile.delete()
}
stage("checkout") {
echo fileExists('parameters.xml').toString()
}
stage ("parse")
{
def xml = readFile "${env.WORKSPACE}/parameters.xml"
println servers(xml)
}
}
@NonCPS
def servers(xmlfile) {
def serv = [:]
def config = new XmlParser().parseText(xmlfile)
config.Config.Servers.Server.each{
serv.add(it.@name)
}
return serv
}
错误输出现在是:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field groovy.util.Node Config
答案 0 :(得分:2)
以下代码
public class VideosFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.videofragment_layout , container , false);
Bundle args = getArguments();
TextView textView = view.findViewById(R.id.textView);
textView.setText(args.getString("Character"));
return view;
}
}
打印
def xml = '''
<AS Name="123">
<Config Name="Configuration1">
<Servers>
<Server Name="server1"/>
<Server Name="server2"/>
<Server Name="server3"/>
<Server Name="server4"/>
</Servers>
</Config>
</AS>
'''
def config = new XmlParser().parseText(xml)
config.Config.Servers.Server.each{
println it.@Name
}
jenkins管道
假设您拥有 parameters.xml
请注意,在问题中你有错误的xml:独立文档声明值必须是&#34; yes&#34;或&#34;不&#34;,不&#34;真&#34;
server1
server2
server3
server4
以下管道打印服务器名称:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AS Name="123">
<Config Name="Configuration1">
<Servers>
<Server Name="server1"/>
<Server Name="server2"/>
<Server Name="server3"/>
<Server Name="server4"/>
</Servers>
</Config>
</AS>
答案 1 :(得分:1)
如此处评论https://issues.jenkins-ci.org/browse/JENKINS-37398所述,请尝试使用地图语法而不是属性语法。
it['Name']
而不是...
it.@Name
对我有用。
答案 2 :(得分:0)
似乎我的问题是脚本安全插件的错误。 https://issues.jenkins-ci.org/browse/JENKINS-37398