- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我需要在我的管道中创建一个步骤来获取 Xml 文件并更改其中的特定元素(基于变量和其他构建输出),然后再进行下一步。
虽然我可以轻松地创建一个 C# 或 Java 程序来执行此操作,但我还是决定尝试在我的管道中添加一个新步骤并直接处理 Xml。
根据这些帖子,我面临的问题是 XmlSlurper
尚未列入白名单:
https://issues.jenkins-ci.org/browse/JENKINS-33024
XmlSlurper
is too problematic and will not be supported. It is sensitive to thread context class loader issues, which can cause mysterious errors from apparently unrelated plugins. Certain methods are also inappropriate to whitelist.
目前我要处理一些文件,还可以。Jenkins Pipeline Utility Steps已经提供了一些函数来读取和处理 JSON。但是 XmlSlurper
或任何与之相关的东西别无选择。
不幸的是,我正在处理一些我无法更改为 JSON 的工具,并且由于 XML 仍在大量使用,有人知道 XmlSlurper
的替代品吗?
我宁愿不尝试手动处理那些 XML,比如处理正则表达式。
最佳答案
在 groovy 的共享库中将 XML 转换为 json。我在 src/org/config 的共享库中有一个名为 GroovyUtils 的类。
package org.config
import groovy.text.SimpleTemplateEngine
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper
import org.json.JSONObject
import org.json.XML
import java.util.ArrayList
import hudson.model.*;
public class GroovyUtils implements Serializable {
def engine = new SimpleTemplateEngine()
def config
def steps
def GroovyUtils(config, steps) {
this.config = config
this.steps = steps
}
def log(msg){
steps.println(msg)
}
def getFinalAttr(thingToSearchFor){
def fileContents = new File("YourXMLFile.xml").text;
def json = xmlToJson(fileContents);
def jsonObj = new JsonSlurper().parseText(json)
def foo = jsonObj["someAttr"].someArr["anotherArr"]
def bar = foo.find { it.name == thingToSearchFor }
return bar.finalAttr
}
def xmlToJson(input) {
JSONObject xmlJSONObj = XML.toJSONObject(input)
return xmlJSONObj.toString(2)
}
}
上面的关键方法是getFinalAttr(thingToSearchFor)。
对 foo 和 bar 局部变量的赋值将取决于您的 jsonObj 的结构,但向您表明可以遍历它以获得您想要的内容。
关于xml - XmlSlurper 的 Jenkins 管道替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47770142/
使用 XmlSlurper,我试图读取 XML 文件(特别是来自基于 .Net 的 API 的 Web.config)作为 Jenkins 管道的一部分。我似乎无法访问元素的任何属性。我得到的错误是:
NAYP99 2012-12-12 11:58:54.000 Lot_Hold 50 OK 72 这是我的 XML,我想更改节点“Anzahl_x0020_R”的值。
我使用 XmlSlurper 处理 XML。它工作正常,直到我更新它。 appendNode 不反射(reflect)大小。 结构更新后如何使用 XmlSlurper? XML 定义: def CAR
我知道在使用 Groovy 的 XMLSlurper 和 StreamingMarkupBuilder 时,XML 文档更改不会立即生效。但是,我不喜欢每次更改文档时都必须进行大量处理。我让它工作的唯
我正在摆弄一个股票行情应用程序。我正在使用谷歌的服务。所以,我阅读了他们的页面并解析了 XML。我可以遍历 xml,但问题是 Google 将实际信息放在标签中。所以,对于最新的价格,我会重复这个:。
是否可以使用任意路径访问Xml的节点? 例如:给定 xml: Australia Production Pickup Truck
我正在使用 XmlSlurper 解析一个脏的 html 页面,我收到以下错误: ERROR org.xml.sax.SAXParseException: Element type "scr" mus
def doc = """ Test1 Test3 Test4 """ def html = new XmlSlurper().parseText(doc) html.
我正在使用 Groovy 的 XmlSlurper 来解析 xhtml 文档(或 sudo xhthml 一个),我正在尝试获取文档的文本节点,但无法弄清楚如何,这是代码: import groovy
是否可以使用 Groovy's XMLSlurper并在索引处插入子节点? 目前 GPathResult 类有 putAt(index) 和 appendNode()。第一个替换索引处的元素而不是插入
情况: def str = """ sudo make me a sandwich! """ def xml = new XmlSlurper().parseText(s
我正在尝试使用 Groovy 和 XmlSlurper 来完成对属于根节点的属性的访问。我可以使用嵌套节点轻松完成此操作,但似乎无法访问根节点。 这是 XML 结构(简化):
我正在考虑为我的应用程序解析一些 xml 内容(基于 groovy),但我不得不在 JSoup 和 groovy 的 native XMLSlurper 之间进行选择。 解析的 RSS 提要中等大小,
有谁知道是否可以以某种方式使用 XMLSlurper,这意味着可以从非常大的 XML 文档中提取各个子树并单独进行处理? 假设您有一个巨大的 XML 提要,其中包含一个根元素,该根元素具有数千个可以单
我有以下常规代码: def xml = ''' Tove Jani Reminder Don't forget me this weekend! m@m.com hello worl
我正在尝试使用 XmlSlurper 解析格式不正确的 HTML 页面,the Eclipse download site W3C validator在页面中显示多个错误。 我尝试了 this 中的容
我在 groovy 中有以下代码片段: s = ''' My title This is body! ''' new XmlSlurper().parse(s) 它给出以下异常: java.
我需要在我的管道中创建一个步骤来获取 Xml 文件并更改其中的特定元素(基于变量和其他构建输出),然后再进行下一步。 虽然我可以轻松地创建一个 C# 或 Java 程序来执行此操作,但我还是决定尝试在
创建包含属性作为键和相应值的映射的最佳方法是什么? 谢谢。 最佳答案 给定: def xml = '' 你可以简单地做: def attrmap = new XmlSlurper().parseTe
我在这个主题上搜索了一段时间,也找到了一些结果,我在文章末尾提到了这些结果。谁能帮我准确回答下面列出的这三个问题? 对于哪些用例,使用 XmlSluper 比 XmlParser 更有意义,反之亦然(
我是一名优秀的程序员,十分优秀!