- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码可以正常工作,但执行 6000 条员工记录需要 15 多个小时,是否可以进行任何改进?
对于 6000 名员工中的每一个,我有两个员工记录结构(员工数据和员工福利),我使用人员编号将它们合并到单个 xml 中(要检查 xml 结构,请检查我之前的问题 - https://stackoverflow.com/questions/65174244/multiple-different-xml-structures-to-one-using-xml-using-xsl)。
现在,当 ID(multimap:Message1 中的 personIdExternal 在 multimap:Message2 中找到相同的 ID/PERNR)时,我必须在 xml 员工记录中附加一个节点/子节点。
xml.'**'.findAll{it.name() == 'EmpEmployment'}.each{ p->
def perID = xml.'**'.find{it.personIdExternal.text() == p.personIdExternal.text()}
def pernr = xml.'**'.find{it.PERNR.text() == '000'+perID.personIdExternal.text()}
if(pernr != null)
{
perID.appendNode {
erpBenEligibility(pernr.PARDT.text()) }
}
}
message.setBody(groovy.xml.XmlUtil.serialize(xml))
示例 XML:
<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
<multimap:Message1>
<person>
<person>
<street>test_stree1</street>
<city>test_city1</city>
<state>test_state1</state>
<EmpEmployment>
<personIdExternal> 001 </personIdExternal>
</EmpEmployment>
</person>
<person>
<street>test_stree2</street>
<city>test_city2</city>
<state>test_state2</state>
<EmpEmployment>
<personIdExternal> 002 </personIdExternal>
</EmpEmployment>
</person>
<person>
<street>test_stree3</street>
<city>test_city3</city>
<state>test_state3</state>
<EmpEmployment>
<personIdExternal> 003</personIdExternal>
</EmpEmployment>
</person>
</person>
</multimap:Message1>
<multimap:Message2>
<rfc:ZHR_GET_EMP_BENEFIT_DETAILS.Response xmlns:rfc="urn:sap-
com:document:sap:rfc:functions">
<phone>
<home>
<phone>number1</phone>
</home>
<PERNR> 001 </PERNR>
<PARDT>#### 1 ####</PARDT>
<home>
<phone>number2</phone>
</home>
<PERNR> 002 </PERNR>
<PARDT>#### 2 ####</PARDT>
<home>
<phone>number3</phone>
</home>
<PERNR> 003 </PERNR>
<PARDT>#### 3 ####</PARDT>
</phone>
</rfc:ZHR_GET_EMP_BENEFIT_DETAILS.Response xmlns:rfc="urn:sap-com:document:sap:rfc:functions">
</multimap:Message2>
</multimap:Messages>
最佳答案
代码中的一些主要问题:
.**
访问器。如果 message1 中有 10000 个 persons
,则 xml.**
将返回一个数组,其中包含 count(person)+count(EmpEmployment)+count(personIdExternal) = 10000*3
个元素。并在此数组上调用 findAll 应该扫描所有这些元素xml.'**'.findAll{it.name() == 'EmpEmployment'}.each{
中,您无缘无故地构建了嵌套的大型数组。例如在这个表达式 def perID = xml.'**'.find{it.personIdExternal.text() == p.personIdExternal.text()}
你有 perID
等于 p
您的代码仍然不符合 xml 示例。
所以,我将做一些假设来展示如何在没有 .** 的情况下构建 gpath。
:
让我们有这样的 xml:
<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
<multimap:Message1>
<person>
<person>
<EmpEmployment>
<personIdExternal>001</personIdExternal>
</EmpEmployment>
</person>
</person>
</multimap:Message1>
<multimap:Message2>
<phone>
<xyz>
<PERNR>000001</PERNR>
<PARDT>#### 1 ####</PARDT>
</xyz>
</phone>
</multimap:Message2>
</multimap:Messages>
这是构建大型 xml 消息的代码部分:
def count = 60000 //just for test let's create xml with 60K elements
def msg = '''<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
<multimap:Message1>
<person>
'''+
(1..count).collect{"""\
<person>
<EmpEmployment>
<personIdExternal>${String.format('%03d',it)}</personIdExternal>
</EmpEmployment>
</person>
"""}.join()+
''' </person>
</multimap:Message1>
<multimap:Message2>
<phone>
'''+
(1..count).collect{"""\
<xyz>
<PERNR>${String.format('%06d',it)}</PERNR>
<PARDT>#### ${it} ####</PARDT>
</xyz>
"""}.join()+
''' </phone>
</multimap:Message2>
</multimap:Messages>
'''
现在是修改后的转换算法:
def xml = new XmlParser().parseText(msg)
def t = System.currentTimeMillis()
def ns = new groovy.xml.Namespace('http://sap.com/xi/XI/SplitAndMerge')
//for fast search let map PERNR value to a node that contains it
def pernrMap=xml[ns.Message2][0].phone[0].children().collectEntries{ [it.PERNR.text(), it] }
//itearte msg1 -> find entry in pernrMap -> add node
xml[ns.Message1][0].person[0].person.each{p->
def emp = p.EmpEmployment[0]
def pernr = pernrMap['000'+emp.personIdExternal.text()]
if(pernr) emp.appendNode('erpBenEligibility', null, pernr.PARDT.text() )
}
groovy.xml.XmlUtil.serialize(xml)
println "t = ${(System.currentTimeMillis()-t)/1000} sec"
即使对于 msg1 和 msg2 中的 60k 个元素,它也会在不到 1 秒的时间内完成转换。
关于javascript - 用于附加 xml 节点的 Groovy 脚本代码需要 15 个小时以上才能处理 6K 条员工记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65526399/
我关注了 tutorial on creating a popup for an add-on在 Firefox 中,效果很好。 我现在遇到的问题是它创建的弹出窗口不会更改大小以适应我添加到其中的内容
我有一些视频,我需要连接一个标题并添加一些覆盖,问题是我需要先做覆盖,否则时间不正确,然后才将标题连接到视频的开头 ffmpeg -i talk.mp4 -i start_pancarte.png
我正在尝试附加一个 CSV 文件。这是我正在使用的线路。不幸的是,我找不到 export-csv 的附加选项。任何想法都有助于使其发挥作用。 Get-ADGroupMember "Domain Adm
我正在努力理解 Attach API (com.sun.tools.attach.*) 的用途。它的典型用途是什么?它是为了“模拟”JVM,以便您可以在不部署/启动代码的情况下测试您的代码吗?它是一个
我不明白为什么这不起作用。 soup_main = BeautifulSoup('FooBar') soup_append = BeautifulSoup('Meh') soup_main.body.
我有以下代码来返回我想要的字符串 $sql = " SELECT `description` FROM `auctions` WHERE `description` REGEX
我正在尝试从数组中附加具有多个值的元素,但我做错了。这是我的代码: for(var i=0; i ` + pricesArray[i].start_date ` ` + pricesArray[i
我正在尝试将图像链接添加到此 javascript 附加表中。使图像位于按钮上方 这是代码 $("#1").append(""+section+""+no+""+price+""+button+""
我有一个问题,我已经解决了,但它太烦人了。 我有一个 js 代码,当使用“追加”按下按钮时,它会放下一些 html 代码,并且通过该代码,我为 x 按钮提供了一个 id,并为容器元素提供了一个 id。
我想逐行读取文件,并且每一行可能都有很多字符。 这个版本的readline效果很好 func readLine(r *bufio.Reader) ([]byte, error) { var (
我有一个网站,每次用户登录或注销时,我都会将其保存到文本文件中。 如果不存在,我的代码在附加数据或创建文本文件时不起作用。这是示例代码 $myfile = fopen("logs.txt", "wr"
我正在尝试使用 typescript 和 Formik 创建一个自定义输入字段。我可以就完成以下代码的最佳方式获得一些帮助吗?我需要添加额外的 Prop 标签和名称......我已经坚持了一段时间,希
我有一个字符串 big_html,我想将它添加到某个 div 中。我观察到以下方面的性能差异: $('#some-div').append( big_html ); // takes about 10
如何使用 FormData 创建以下结果 ------WebKitFormBoundaryOmz20xyMCkE27rN7 Content-Disposition: form-data; name="
有没有办法附加 jQuery 事件处理程序,以便在任何先前附加的事件处理程序之前触发该处理程序?我遇到了this article ,但代码不起作用,因为事件处理程序不再存储在数组中,而这正是他的代码所
我正在开发一个需要网络登录的 iPhone 应用程序。像往常一样我打电话 [[UIApplication sharedApplication] openURL:loginURL]; 这将关闭应用程序并
我想开发一个仅针对特定域激活的扩展。 我不希望它在不浏览此特定域时出现在浏览器菜单中。 有可能这样做吗? 最佳答案 可能:对于菜单,您可以添加一个弹出窗口侦听器,用于检查当前加载的URL(docs f
这段 JavaScript 代码 function writeCookie(CookieName, CookieValue, CookieDuration) { var expiration
我正在使用 Handlebars 来渲染使用ajax从本地服务器获得的信息。我的 HTML 看起来像: {{#each Tabs}}
我尝试了以下代码,但当输入框中没有数据时它不会通知。当我直接添加此内容(不附加)时,它会起作用。我在这里做错了什么 var output = "\n"+ "\n"+
我是一名优秀的程序员,十分优秀!