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    <=