是否可以使用 XML GENERATE 创建具有不同大小的多层嵌套元素的 XML?
例如:
01 SOURCE-REC.
05 REPEATING-PARENT OCCURS 5 TIMES.
10 PARENT-NAME PIC X(7).
10 CHILD-COUNT PIC 9.
10 REPEATING-CHILD OCCURS 1 TO 5 TIMES
DEPENDING ON CHILD-COUNT.
15 CHILD-NAME PIC X(6).
使用 Enterprise Cobol v4.1 编译它会产生:
IGYGR1263-S“OCCURS DEPENDING ON”对象“CHILD-COUNT”被定义为一个表 元素。 “取决于”短语已被丢弃。
IGYGR1116-S 表“REPEATING-CHILD”的“DEPENDING ON”对象无效。这 “取决于”短语被丢弃。
并非所有 parent 都会有相同数量的 child 。如何解决这个问题?
编辑:我想从本质上讲,这并不是一个真正的 XML 问题。我在尝试构建工作存储时遇到了困难,我希望稍后将其提供给 XML GENERATE。
最佳答案
第一个答案的总结:你不能定义 COBOL 中包含 ODO 对象的复杂 ODO 一张 table 内。因此,XML 是不可能的 GENERATE 为每个生成不同数量的“childern” “ parent ”的出现。你必须忍受固定的生活 表尺寸和空节点。
第二轮:您是否考虑过重新解析/重新构造 生成 XML 字符串以消除空节点?这个 可能听起来有点奇怪,但可能并非如此 难的。看看下面的程序和 它产生的输出...
<pre><code> IDENTIFICATION DIVISION. PROGRAM-ID. EXAMPLE1. DATA DIVISION. WORKING-STORAGE SECTION. 77 I PIC S9(4) BINARY. 77 XL PIC S9(4) BINARY. 77 XML-TAG PIC X(34). 01 XML-DATA. 05 XML-MSG-A PIC X(8000). 05 XML-CHARS-A PIC S9(4) BINARY. 05 XML-MSG-B PIC X(8000). 05 XML-CHARS-B PIC S9(4) BINARY. 01 SOURCE-REC. 05 REPEATING-PARENT OCCURS 5 TIMES. 10 PARENT-NAME PIC X(7). 10 CHILD-COUNT PIC 9. 10 REPEATING-CHILD OCCURS 5 TIMES. 15 CHILD-NAME PIC X(6). 01 XML-STACK. 05 SP PIC S9(4) BINARY. 05 STACK-REC OCCURS 500 TIMES. 15 NODE-NAME PIC X(31). 15 NODE-POS PIC S9(4) BINARY. 15 NODE-IS-EMPTY PIC X. 88 NODE-IS-EMPTY-YES VALUE 'Y'. 88 NODE-IS-EMPTY-NO VALUE 'N'. 15 EMPTY-WHEN-IND PIC X. 88 EMPTY-ZERO-OR-SPACE VALUE 'Z'. 88 EMPTY-NEVER VALUE 'N'. PROCEDURE DIVISION. INITIALIZE SOURCE-REC. MOVE 'p-1' TO PARENT-NAME (1) MOVE 2 TO CHILD-COUNT (1) MOVE 'c-1-1' TO CHILD-NAME (1 1) MOVE 'c-1-2' TO CHILD-NAME (1 2) MOVE 'p-2' TO PARENT-NAME (2) MOVE 0 TO CHILD-COUNT (2) MOVE 'p-3' TO PARENT-NAME (3) MOVE 1 TO CHILD-COUNT (3) MOVE 'c-3-1' TO CHILD-NAME (3 1) XML GENERATE XML-MSG-A FROM SOURCE-REC COUNT IN XML-CHARS-A MOVE ZERO TO XML-CHARS-B MOVE SPACES TO XML-MSG-B XML PARSE XML-MSG-A(1:XML-CHARS-A) PROCESSING PROCEDURE CLEAN-UP PERFORM VARYING I FROM 1 BY 80 UNTIL I > XML-CHARS-B DISPLAY XML-MSG-B (I:80) END-PERFORM GOBACK . CLEAN-UP SECTION. COMPUTE XL = FUNCTION LENGTH (XML-TEXT) EVALUATE XML-EVENT WHEN 'START-OF-ELEMENT' ADD 1 TO SP MOVE XML-TEXT(1:XL) TO NODE-NAME (SP) COMPUTE NODE-POS (SP) = XML-CHARS-B + 1 STRING '<' XML-TEXT(1:XL) '>' DELIMITED BY SIZE INTO XML-TAG MOVE XML-TAG TO XML-MSG-B (XML-CHARS-B + 1:XL + 2) COMPUTE XML-CHARS-B = XML-CHARS-B + XL + 2 SET NODE-IS-EMPTY-YES (SP) TO TRUE ***** EVALUATE XML-TEXT(1:XL) ***** WHEN 'CHILD-COUNT' ***** SET EMPTY-NEVER (SP) TO TRUE ***** WHEN OTHER SET EMPTY-ZERO-OR-SPACE (SP) TO TRUE ***** END-EVALUATE WHEN 'CONTENT-CHARACTERS' IF EMPTY-ZERO-OR-SPACE (SP) AND (XML-TEXT(1:XL) = ZERO OR XML-TEXT(1:XL) = SPACE) CONTINUE ELSE SET NODE-IS-EMPTY-NO (SP) TO TRUE MOVE XML-TEXT(1:XL) TO XML-MSG-B (XML-CHARS-B + 1:XL) COMPUTE XML-CHARS-B = XML-CHARS-B + XL END-IF WHEN 'END-OF-ELEMENT' IF NODE-IS-EMPTY-YES (SP) COMPUTE XML-CHARS-B = NODE-POS (SP) - 1 SUBTRACT 1 FROM SP ELSE STRING '</' XML-TEXT(1:XL) '>' DELIMITED BY SIZE INTO XML-TAG MOVE XML-TAG TO XML-MSG-B (XML-CHARS-B + 1:XL + 3) COMPUTE XML-CHARS-B = XML-CHARS-B + XL + 3 SUBTRACT 1 FROM SP IF SP > ZERO SET NODE-IS-EMPTY-NO (SP) TO TRUE ELSE MOVE SPACES TO XML-MSG-B (XML-CHARS-B + 1:) END-IF END-IF END-EVALUATE . </code></pre> <p></p>
为您提供以下 XML 字符串(切成 80 个字符 block )
<pre><code><SOURCE-REC><REPEATING-PARENT><PARENT-NAME>p-1</PARENT-NAME><CHILD-COUNT>2</CHIL D-COUNT><REPEATING-CHILD><CHILD-NAME>c-1-1</CHILD-NAME></REPEATING-CHILD><REPEAT ING-CHILD><CHILD-NAME>c-1-2</CHILD-NAME></REPEATING-CHILD></REPEATING-PARENT><RE PEATING-PARENT><PARENT-NAME>p-2</PARENT-NAME></REPEATING-PARENT><REPEATING-PAREN T><PARENT-NAME>p-3</PARENT-NAME><CHILD-COUNT>1</CHILD-COUNT><REPEATING-CHILD><CH ILD-NAME>c-3-1</CHILD-NAME></REPEATING-CHILD></REPEATING-PARENT></SOURCE-REC> </code></pre> <p></p>
所有空节点都已删除。
注意上面程序中注释的代码行。通过重新激活这些你 可以保留空的 REPEATING-PARENT 节点。根据您的需要, 确定什么构成空节点可能稍微复杂一些。
无论如何,这可能会让您更接近您想要的位置。
干杯...
关于COBOL 中的 XML 具有嵌套表和不同的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104353/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer