XML提取

2020-08-22 05:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我想从我的XML源提取一组节点到新的XML目标。 例如,我有以下XML字符串:

 
    
        12 
        12 
    
  

我想拥有以下XML字符串:

 
        12 
        12 
     

任何帮助将不胜感激:)

此致

Laurent G。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我想从我的XML源提取一组节点到新的XML目标。 例如,我有以下XML字符串:

 
    
        12 
        12 
    
  

我想拥有以下XML字符串:

 
        12 
        12 
     

任何帮助将不胜感激:)

此致

Laurent G。

付费偷看设置
发送
3条回答
zhangjiyang1323
1楼 · 2020-08-22 06:10.采纳回答

您可以使用if_ixml_node-> clone。 您是否了解所有XML接口,并且知道如何使用它们? (在SE24'cl_ixml *'和'if_ixml *'中查找)。

编码:

 *接口
 数据:iv_xml TYPE字符串,
       ev_xml TYPE字符串。

 * xml数据
 数据:lr_xml类型引用为if_ixml,
       lr_new_xml类型为if_ixml,
       lr_document类型参考if_ixml_document,
       lr_new_document类型参考if_ixml_document,
       lr_streamfactory类型参考if_ixml_stream_factory,
       lr_new_streamfactory类型参考if_ixml_stream_factory,
       lr_istream类型参考if_ixml_istream,
       lr_ostream类型参考if_ixml_ostream,
       lr_renderer类型参考if_ixml_renderer,
       lr_parser类型参考if_ixml_parser,
       lr_nodes类型参考if_ixml_node_collection,
       lr_node类型参考if_ixml_node,
       lr_new_node类型引用到if_ixml_node。
 数据lv_index TYPE i。
 数据lv_rval TYPE i。

 *创建xml主工厂
 调用方法cl_ixml => create
   接收
     rval = lr_xml。

 *创建xml文档
 调用方法lr_xml-> create_document
   接收
     rval = lr_document。

 *创建xml流工厂
 调用方法lr_xml-> create_stream_factory
   接收
     rval = lr_streamfactory。

 *创建xml输入流
 " iv_xml ='   12   12   "。
 呼叫方法lr_streamfactory-> create_istream_string
   出口
     string = iv_xml"您的xml文档为字符串
   接收
     rval = lr_istream。

 *创建xml解析器
 调用方法lr_xml-> create_parser
   出口
     document = lr_document
     istream = lr_istream
     stream_factory = lr_streamfactory
   接收
     rval = lr_parser。

 *将输入流解析为文档
 调用方法lr_parser-> parse。

 ******************************************************  ************
 *读取节点
 呼叫方法lr_document-> get_elements_by_tag_name
   出口
     名称='enc'
   接收
     rval = lr_nodes。

 *读取节点
 呼叫方法lr_nodes-> get_item
   出口
     索引= lv_index
   接收
     rval = lr_node。

 如果lr_node不是INITIAL。

   "创建新的xml
   调用方法cl_ixml => create
     接收
       rval = lr_new_xml。
   "创建新的xml文档
   呼叫方法lr_new_xml-> create_document
     接收
       rval = lr_new_document。

   克隆当前节点
   lr_new_node = lr_node-> clone()。

   "将新节点作为子节点追加到新文档中
   lv_rval = lr_new_document-> append_child(lr_new_node)。

 *创建新的xml流工厂
   调用方法lr_new_xml-> create_stream_factory
     接收
       rval = lr_new_streamfactory。

 *创建新的xml输出流作为字符串
   呼叫方法lr_new_streamfactory-> create_ostream_cstring
     出口
       字符串= ev_xml
     接收
       rval = lr_ostream。

 *创建xml渲染器
   调用方法lr_new_xml-> create_renderer
     出口
       document = lr_new_document
       ostream = lr_ostream
     接收
       rval = lr_renderer。
 *将文档渲染到输出流中
   调用方法lr_renderer-> render。

 万一。

 
半个程序猿
2楼-- · 2020-08-22 06:20

LAURENT GUILLAUME ,很高兴能为您提供帮助。 让我知道它是否对您有用,或者您还有其他问题。

请注意:请对"评论"而不是"答案"使用"评论功能"。 您的"答案"应该是上面"答案"的"注释"。

zhangjiyang1323
3楼-- · 2020-08-22 05:56

你好迈克尔,

我知道cl_ixml *类,但我不像你那样熟练:)

克隆方法...当然...现在,我阅读了您的代码,这是清楚而合理的:)

非常感谢!!

一周热门 更多>