배경 : XML에서 모든 특성 및 값을 가져 오려고합니다. 나는 XmlSlurper뿐만 아니라 XmlParser를 사용해 보았습니다. 다른 제안 (XML의 JIRA 워크 플로우, 리포트에 값을 넣으려는 시도)에 대해 공개적입니다.중첩 된 XML의 특성 및 값을 구문 분석하십시오.
속성을 실행하면 최상위 수준에서 아무 것도 반환하지 않습니다. 그래서 각각을()로 실행하면 사용할 수 있습니다. 처음 세 반환 값은 제대로 작동하지만 다음 'level'은 각 다음 배열에서 각각을 실행하지 않는 한 올바르게 작동하지 않습니다. 나는 이것에 무엇을해야하는지 정말로 모른다. 각 워크 플로우의 길이는 다양합니다. 나는 일종의 정규식에 대해 생각했지만 그것은 워크 플로우의 길이와 종류가 다양 할 때 실행 가능할 것 같지 않았다. 이는 매우 기본적인 워크 플로입니다. 다른 것들은 훨씬 더 복잡하고 단계와 속성의 수는 다양합니다.
children 메소드를 실행하면 값이 반환되지만 노드 클래스에는없는 값이 반환됩니다. 나는 그것이 가치를 위해 무엇을 반환 할 것인지를 보여주기 위해 여기에 넣었습니다. 어떤 제안?
def xml =
//'<?xml version="1.0" encoding="UTF-8"?>\n' +
//'<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">\n' +
'<workflow>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.update.author.key">admin</meta>\n' +
' <meta name="jira.updated.date">1503954892468</meta>\n' +
' <initial-actions>\n' +
' <action id="1" name="Create">\n' +
' <meta name="jira.i18n.submit">common.forms.create</meta>\n' +
' <meta name="jira.i18n.title">common.forms.create</meta>\n' +
' <validators>\n' +
' <validator name="" type="class">\n' +
' <arg name="permission">Create Issue</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.validator.PermissionValidator</arg>\n' +
' </validator>\n' +
' </validators>\n' +
' <results>\n' +
' <unconditional-result old-status="null" status="open" step="1">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueCreateFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">1</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' </initial-actions>\n' +
' <steps>\n' +
' <step id="1" name="To Do">\n' +
' <meta name="jira.status.id">10000</meta>\n' +
' <actions>\n' +
' <action id="11" name="Start Progress">\n' +
' <meta name="jira.i18n.submit">startprogress.title</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">startprogress.title</meta>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="2">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowassigntocurrentuser-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.AssignToCurrentUserFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' <action id="21" name="Done">\n' +
' <meta name="jira.i18n.submit">jira.issuetracking.simple.workflow.action.done.name</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">jira.issuetracking.simple.workflow.action.done.name</meta>\n' +
' <restrict-to>\n' +
' <conditions>\n' +
' <condition type="class">\n' +
' <arg name="permission">RESOLVE_ISSUES</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.condition.PermissionCondition</arg>\n' +
' </condition>\n' +
' </conditions>\n' +
' </restrict-to>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="3">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="field.name">resolution</arg>\n' +
' <arg name="field.value">10000</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' </actions>\n' +
' </step>\n' +
' <step id="2" name="In Progress">\n' +
' <meta name="jira.status.id">3</meta>\n' +
' <actions>\n' +
' <action id="31" name="Stop Progress">\n' +
' <meta name="jira.i18n.submit">stopprogress.title</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">stopprogress.title</meta>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="1">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' <action id="41" name="Done">\n' +
' <meta name="jira.i18n.submit">jira.issuetracking.simple.workflow.action.done.name</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">jira.issuetracking.simple.workflow.action.done.name</meta>\n' +
' <restrict-to>\n' +
' <conditions>\n' +
' <condition type="class">\n' +
' <arg name="permission">RESOLVE_ISSUES</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.condition.PermissionCondition</arg>\n' +
' </condition>\n' +
' </conditions>\n' +
' </restrict-to>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="3">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="field.name">resolution</arg>\n' +
' <arg name="field.value">10000</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' </actions>\n' +
' </step>\n' +
' <step id="3" name="Done">\n' +
' <meta name="jira.status.id">10001</meta>\n' +
' <actions>\n' +
' <action id="51" name="Reopen">\n' +
' <meta name="jira.i18n.submit">jira.issuetracking.simple.workflow.action.reopen.name</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">jira.issuetracking.simple.workflow.action.reopen.name</meta>\n' +
' <restrict-to>\n' +
' <conditions>\n' +
' <condition type="class">\n' +
' <arg name="permission">RESOLVE_ISSUES</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.condition.PermissionCondition</arg>\n' +
' </condition>\n' +
' </conditions>\n' +
' </restrict-to>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="1">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="field.name">resolution</arg>\n' +
' <arg name="field.value"></arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' <action id="61" name="Reopen and start progress">\n' +
' <meta name="jira.i18n.submit">jira.issuetracking.simple.workflow.action.reopenandstartprogress.name</meta>\n' +
' <meta name="jira.description"></meta>\n' +
' <meta name="jira.i18n.title">jira.issuetracking.simple.workflow.action.reopenandstartprogress.name</meta>\n' +
' <results>\n' +
' <unconditional-result old-status="Not Done" status="Done" step="2">\n' +
' <post-functions>\n' +
' <function type="class">\n' +
' <arg name="field.name">resolution</arg>\n' +
' <arg name="field.value"></arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowupdateissuestatus-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.UpdateIssueStatusFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowassigntocurrentuser-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.AssignToCurrentUserFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowcreatecomment-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.misc.CreateCommentFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowgeneratechangehistory-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowreindexissue-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.issue.IssueReindexFunction</arg>\n' +
' </function>\n' +
' <function type="class">\n' +
' <arg name="eventTypeId">13</arg>\n' +
' <arg name="full.module.key">com.atlassian.jira.plugin.system.workflowfireevent-function</arg>\n' +
' <arg name="class.name">com.atlassian.jira.workflow.function.event.FireIssueEventFunction</arg>\n' +
' </function>\n' +
' </post-functions>\n' +
' </unconditional-result>\n' +
' </results>\n' +
' </action>\n' +
' </actions>\n' +
' </step>\n' +
' </steps>\n' +
'</workflow>\n' +
''
def doc = new XmlParser().parseText(xml)
def attr = doc.attributes() //no results
doc.each {
if (it.attributes()) {
println(it.name())
println(it.attributes())
println(it.value())
println ""
} else {
println (it.children())
}
}
출력 :
meta
[name:jira.description]
[]
meta
[name:jira.update.author.key]
[admin]
meta
[name:jira.updated.date]
[1503954892468]
[action[attributes={id=1, name=Create}; value=[meta[attributes={name=jira.i18n.submit}; value=[common.forms.create]], meta[attributes={name=jira.i18n.title}; value=[common.forms.create]], validators[attributes={}; value=[validator[attributes={name=, type=class}; value=[arg[attributes={name=permission}; value=[Create Issue]], arg[attributes={name=class.name}; value=[com.atlassian.jira.workflow.validator.PermissionValidator]]]]]], results[attributes={}; value=[unconditional-result[attributes={old-status=null, status=open, step=1}; value=[post-functions[attributes={}; value=[function[attributes={type=class}; value=[arg[attributes={name=class.name}; value=[com.atlassian.jira.workflow.function.issue.IssueCreateFunction]]]], function[attributes={type=class}; value=[arg[attributes={name=class.name}; value=[com.atlassian.jira.workflow.function.issue.IssueReindexFunction]]]], function[attributes={type=class}; value=[arg[attributes={name=eventTypeId}; value=[1]], arg[attributes={name=class.name}; value=[com.atlassian.jira.workflow.function.event.FireIssueEventFunction]]]]]]]]]]]]]
...
원하는 출력 : 은 바람직하게는이 같은 몇 가지 형식으로, 모든 속성과 값을 얻기 :
attribute name : value
jira.updated.date : 1503954892468
jira.update.author.key : admin
시도 할 수 있습니다. 표시된 출력이 맞습니까? 그렇지 않다면 원하는 출력은 무엇입니까? – Rao
하단에 섹션을 추가했습니다. 그냥 속성 이름과 관련 값을 가져 오는 것입니다. 문제는 출력 값이 올바르지 않다는 것만은 아닙니다. 배열을 따라가는 것이 아니라 읽기 쉽고 속성과 해당 값을 보여주는 형식으로 가져올 수 없습니다. –
모든 ''요소의 속성 만 원합니까? – Rao