ABAP IXML删除多个空白

ABAP IXML删除多个空白,xml,abap,Xml,Abap,创建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_ne

创建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.

正如您所说,您的代码没有任何问题,空格不会像预期的那样被删除。请注意,当您

但正如我看到的,您没有看到,也许未来的访问者在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    <=

=>1234567890
如何停止
这取决于您如何创建XML。给我们看看代码好吧我没做任何改动,但现在可以用了。有点(不)幸运。
cstring(| 12345 67890 |)
我相信您在这里使用的是var,而不是literal,而且这个var似乎是char类型,而不是string。这就是它现在起作用的原因
li_parser->add_preserve_space_element( ).
=>    12345    67890    <=