我想遍历if_ixml_document的整个节点。这是最好的方法吗?
请查看示例文档。
<text>
<id>
<guid auto="false">
432543254543
</guid>
</id>
<title>
<short_title italics="on">
<bold language = "german">
"Hello"
</bold>
</short_title>
</title> </text>
在本文档中,我需要遍历节点<text>, <id>, <guid> , <title>, <short_title>, <bold>
等。
提前致谢
此致 亚历
答案 0 :(得分:4)
第一步是按如下方式解析XML。您当然可以将XML从文件上传到字符串中,但这只是一个示例:
data: lr_xml type ref to cl_xml_document.
data: lr_node type ref to if_ixml_node.
data: lv_xml type string.
lv_xml = '<text> <id> <guid auto="false"> 432543254543 </guid> </id> <title> <short_title italics="on"> <bold language = "german"> "Hello"</bold> </short_title> </title> </text>'.
create object lr_xml.
lr_xml->parse_string( lv_xml ).
lr_node = lr_xml->get_first_node( ).
现在您有一个指向XML文档根目录的IF_XML_NODE实例。您现在可以使用各种方法遍历XML树,并使用各种方法(例如GET_CHILDREN,GET_ATTRIBUTES,GET_NAME等)从中获取值。
对于相当小的XML文档,这是可以的,但是为了提高效率,如果要查找特定的节点集,可能需要查看使用XPATH查询。
答案 1 :(得分:2)
您可以找到extensive XML manual on SAP's documentation website(如果链接无法正常工作,请转到help.sap.com上的NetWeaver开发人员指南并搜索“xml库”。)
“iXML ABAP Objects Jumpstart”一章可以让您快速入门。 “迭代完整的DOM树”段落提供了以下示例代码:
data: iterator type ref to if_ixml_node_iterator,
node type ref to if_ixml_node.
iterator = document->create_iterator( ).
node = iterator->get_next( ).
while not node is initial.
* do something with the node
...
node = iterator->get_next( ).
endwhile.
答案 2 :(得分:1)
我希望以下示例可以澄清情况:
DATA: lcl_xml_doc TYPE REF TO cl_xml_document,
lf_node TYPE REF TO if_ixml_node,
lf_value TYPE string,
i_xml type string,
lf_name TYPE string,
i_xml = 'PUT your XML HERE'.
CREATE OBJECT lcl_xml_doc.
IF lcl_xml_doc IS BOUND.
IF lcl_xml_doc->parse_string( i_xml ) EQ 0.
lf_node = lcl_xml_doc->m_document.
IF lf_node IS NOT INITIAL.
lf_iterator = lf_node->create_iterator( ).
lf_node = lf_iterator->get_next( ).
WHILE NOT lf_node IS INITIAL.
lf_name = lf_node->get_name( ).
lf_value = lf_node->get_value( ).
IF lf_name = 'text'.
" do something for text
ENDIF.
ENDIF.
lf_node = lf_iterator->get_next( ).
ENDWHILE.
ENDIF.
享受, 亚历山大。
答案 3 :(得分:0)
手动xml遍历在更改环境中容易出错且复杂。您可能想要检查是否确实需要直接代码遍历。
借助(XSLT)转换,您可以将XML转换为ABAP结构化类型。支持XPath。
使用事务STRANS
打开的转换编辑器完成转换的声明,测试和调试。
XSLT可用作转换类型: ABAP XSLT Transformation
在您的ABAP代码中,您只需调用语言元素CALL TRANSFORMATION
,然后就可以在目标结构中处理数据了:
ABAP Statement: 'CALL TRANSFORMATION'
答案 4 :(得分:-1)
您可以使用任何DOM库应该实现的DocumentTraversal
接口(Xerces拥有它):
Document doc = ...;
NodeIterator i = ((DocumentTraversal) doc).createNodeIterator(doc,
NodeFilter.SHOW_ELEMENT, null, false);
Element e = null;
while ((e = (Element) i.nextNode()) != null) {
// do stuff with element
}