微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ABAP IXML 删除多个空格

如何解决ABAP IXML 删除多个空格

创建 ixml 元素并将值设置为包含 12345 67890 的文本类型 cstring 时,空格将呈现为单个空格 12345 67890。如何阻止 ABAP 合并我的空间?

DATA(li_doc) = cl_ixml=>create( )->create_document( ).

" INITIALIZE XML

DATA(li_new_node) = li_doc->create_element_ns( name = |test| prefix = |foo| ).
li_new_node->append_child( li_doc->create_text( |12345    67890| ) ).
li_doc->append_child( li_new_node ).

" RENDER XML

DATA: l_xml_string TYPE string.

DATA(li_ixml) = cl_ixml=>create( ).
DATA(li_streamfactory) = li_ixml->create_stream_factory( ).
DATA(li_ostream) = li_streamfactory->create_ostream_cstring( l_xml_string ).

DATA(li_renderer) = li_ixml->create_renderer( ostream = li_ostream document = li_doc ).
li_renderer->set_normalizing( abap_false ).
li_renderer->render( ).

WRITE l_xml_string.

解决方法

正如您所说,您的代码没有任何问题,没有按预期删除空格。请注意,当您 think better of your question,you may delete it - nobody minds.

但正如我所见,您没有看到,也许未来的访问者会遇到 iXML 中“删除空白”的问题,所以我解释了一种可能发生的情况。

空白可能会在您解析 XML 字符串时删除,而不是在渲染时删除。示例:

DATA: l_xml_string TYPE string.

DATA(li_ixml) = cl_ixml=>create( ).
DATA(li_doc) = li_ixml->create_document( ).
DATA(li_streamfactory) = li_ixml->create_stream_factory( ).

" INITIALIZE XML

l_xml_string = '<?xml version="1.0"?><foo:test>    12345    67890    </foo:test>'.

" PARSE XML

DATA(li_Istream) = li_streamfactory->create_istream_cstring( l_xml_string ).
DATA(li_parser) = li_ixml->create_parser( document = li_doc istream = li_istream stream_factory = li_streamfactory ).
li_parser->parse( ).

l_xml_string = li_doc->get_root_element( )->get_value( ).

WRITE : '=>' NO-GAP,l_xml_string NO-GAP,'<='.

结果删除了前导和尾随空格:

=>12345    67890<=

如果您在 li_parser->parse( ) 之前添加此行:

li_parser->add_preserve_space_element( ).

结果的前导和尾随空格不变:

=>    12345    67890    <=

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。