如何解决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 举报,一经查实,本站将立刻删除。