2011-10-04 49 views
5

Tôi muốn duyệt qua toàn bộ các nút của if_ixml_document. đó là cách tốt nhất để làm điều này?Abap - Traversing toàn bộ các nút của tài liệu xml?

Vui lòng tìm tài liệu mẫu.

<text> 
    <id> 
     <guid auto="false"> 
       432543254543 
     </guid> 
    </id> 
    <title> 
     <short_title italics="on"> 
       <bold language = "german"> 
        "Hello" 
       </bold> 
     </short_title> 
    </title> </text> 

Trong tài liệu này, tôi cần phải đi qua thông qua các nút <text>, <id>, <guid> , <title>, <short_title>, <bold>, vv

Cảm ơn trước

Kính trọng, Alex

Trả lời

2

Bạn có thể tìm thấy extensive XML manual on SAP's documentation website (trong trường hợp liên kết không hoạt động chính xác, hãy truy cập Hướng dẫn dành cho nhà phát triển NetWeaver theo số help.sap.com và tìm kiếm 'thư viện xml').

Chương 'iXML ABAP Objects Jumpstart' sẽ giúp bạn bắt đầu nhanh chóng. Đoạn 'Iterating qua hoàn chỉnh DOM cây' cung cấp đoạn mã sau ví dụ:

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. 
-1

Bạn có thể sử dụng giao diện DocumentTraversal mà cần được thực hiện bởi bất kỳ thư viện DOM nào (Xerces có nó):

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 
} 
+0

Câu hỏi đặt ra là được đánh dấu là câu hỏi ABAP, vì vậy tôi giả sử nó là ngôn ngữ ABAP. Có thể @ user871912 chỉ có thể xác nhận. – mydoghasworms

+0

@mydoghasworms. Được cấp. Khi nó quay ra mặc dù, ABAP hỗ trợ các giao diện tương tự, mặc dù trong * hơi * cú pháp khác nhau :-) –

4

Bước đầu tiên là phân tích cú pháp XML của bạn như sau. Tất nhiên, bạn có thể tải lên XML từ một tệp vào chuỗi, nhưng đây chỉ là một ví dụ:

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(). 

Bây giờ bạn có một thể hiện IF_XML_NODE trỏ đến gốc của tài liệu XML của bạn. Bây giờ bạn có thể sử dụng các phương thức khác nhau để duyệt qua cây XML và lấy các giá trị từ nó, sử dụng các phương thức khác nhau như GET_CHILDREN, GET_ATTRIBUTES, GET_NAME, v.v.

Điều này sẽ ổn cho các tài liệu XML khá nhỏ, mặc dù hiệu quả , nếu bạn đang tìm kiếm một tập hợp các nút cụ thể, bạn có thể muốn xem xét sử dụng truy vấn XPATH.

+0

cảm ơn rất nhiều cho trả lời. Thứ nhất, tôi không tìm kiếm bất kỳ tập hợp các nút cụ thể nào. Tôi đang viết một phương pháp rất chung chung somethig như thay đổi giá trị thuộc tính của tất cả các yếu tố trên một số điều kiện. Từ mã này, tôi chắc chắn sẽ nhận được nút gốc. nhưng sau hơn nếu tôi đang sử dụng các phương pháp như get_children, tôi sẽ chỉ nhận được con ngay lập tức của nút gốc. Trong tài liệu mẫu tôi sẽ nhận được các yếu tố nhưng tôi sẽ không đưa trẻ vào bên trong. Tôi đang tìm một phương thức có thể duyệt toàn bộ các phần tử trong tài liệu. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/871912/">Alex</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+1</span></div> <div class="col-lg-11"> <p class="commenttext">Chính xác, nó chỉ cung cấp cho bạn những đứa trẻ ngay lập tức. Những gì bạn cần làm là viết một chương trình con đệ quy để đi qua toàn bộ tài liệu. Tôi hy vọng sẽ có thời gian sớm để cung cấp cho bạn một ví dụ. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/274354/">mydoghasworms</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Tôi hy vọng sau ví dụ có thể làm rõ tình hình:</p> <pre><code class="prettyprint-override">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. </code></pre> <p>Thưởng thức, Alexander.</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/7660171">Nguồn</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2011-10-05 10:52:42</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Chuyển hướng xml thủ công dễ bị lỗi và phức tạp trong việc thay đổi môi trường. Bạn có thể muốn kiểm tra xem bạn có thực sự cần truyền tải mã trực tiếp hay không.</p> <p>Với sự trợ giúp của các phép biến đổi (XSLT), bạn có thể chuyển đổi XML thành các loại có cấu trúc ABAP. XPath được hỗ trợ.</p> <p>Tuyên bố, kiểm tra và gỡ lỗi các phép biến đổi được thực hiện bằng Trình chỉnh sửa chuyển đổi được mở bằng giao dịch <code class="prettyprint-override">STRANS</code>.</p> <p>XSLT có sẵn như là kiểu chuyển đổi: <a href="http://help.sap.com/abapdocu_70/en/ABENABAP_XSLT.htm" rel="nofollow">ABAP XSLT Transformation</a></p> <p>Trong Mã ABAP của bạn, bạn sẽ chỉ cần gọi các yếu tố ngôn ngữ <code class="prettyprint-override">CALL TRANSFORMATION</code> và các dữ liệu đã sẵn sàng để xử lý trong cơ cấu mục tiêu của bạn sau đó: <a href="http://help.sap.com/abapdocu_70/en/ABAPCALL_TRANSFORMATION.htm" rel="nofollow">ABAP Statement: 'CALL TRANSFORMATION'</a></p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/8794993">Nguồn</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2012-01-09 20:47:32</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1098409/">Eric</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592049017"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Câu hỏi mới nhất </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://vi.uwenku.com/question/p-oewhmukg-k.html" target="_blank" title="AngularJS: Chọn không thay đổi tùy chọn đã chọn về thay đổi biến phạm vi bị ràng buộc"> AngularJS: Chọn không thay đổi tùy chọn đã chọn về thay đổi biến phạm vi bị ràng buộc </a> </li> <li class="side_article_list_item"> 2. <a href="http://vi.uwenku.com/question/p-hqevmxvv-a.html" target="_blank" title="Làm thế nào để tạo ra nhiều phân tích cây cho một câu mơ hồ trong NLTK?"> Làm thế nào để tạo ra nhiều phân tích cây cho một câu mơ hồ trong NLTK? </a> </li> <li class="side_article_list_item"> 3. <a href="http://vi.uwenku.com/question/p-skxhmqjy-d.html" target="_blank" title="Đi qua các thông số chuyển hướng phức tạp với MvvmCross ShowViewModel"> Đi qua các thông số chuyển hướng phức tạp với MvvmCross ShowViewModel </a> </li> <li class="side_article_list_item"> 4. <a href="http://vi.uwenku.com/question/p-bpzejolr-p.html" target="_blank" title="Có cách nào tôi có thể gỡ lỗi một tuyến đường trong ASP. MVC5?"> Có cách nào tôi có thể gỡ lỗi một tuyến đường trong ASP. MVC5? </a> </li> <li class="side_article_list_item"> 5. <a href="http://vi.uwenku.com/question/p-xkdlzsng-g.html" target="_blank" title="mongodb: trả về một mảng các id tài liệu"> mongodb: trả về một mảng các id tài liệu </a> </li> <li class="side_article_list_item"> 6. <a href="http://vi.uwenku.com/question/p-kncvihrt-bn.html" target="_blank" title="Phân tích tài liệu mới của Xcode 5 hoạt động như thế nào?"> Phân tích tài liệu mới của Xcode 5 hoạt động như thế nào? </a> </li> <li class="side_article_list_item"> 7. <a href="http://vi.uwenku.com/question/p-ujkxdubx-o.html" target="_blank" title="Sử dụng tên cột khi sử dụng SqlDataReader.IsDBNull"> Sử dụng tên cột khi sử dụng SqlDataReader.IsDBNull </a> </li> <li class="side_article_list_item"> 8. <a href="http://vi.uwenku.com/question/p-vgvgueqa-k.html" target="_blank" title="">>>" có nghĩa là gì trong java?"> ">>>" có nghĩa là gì trong java? </a> </li> <li class="side_article_list_item"> 9. <a href="http://vi.uwenku.com/question/p-ezpvfuzu-m.html" target="_blank" title="jQuery chắp thêm vào vòng lặp - DOM không cập nhật cho đến khi kết thúc"> jQuery chắp thêm vào vòng lặp - DOM không cập nhật cho đến khi kết thúc </a> </li> <li class="side_article_list_item"> 10. <a href="http://vi.uwenku.com/question/p-pfxxbotz-bh.html" target="_blank" title="Không thể cuộn scrollToToTop hoạt động trên iOS7"> Không thể cuộn scrollToToTop hoạt động trên iOS7 </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Các vấn đề liên quan</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Không có vấn đề liên quan^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://vi.uwenku.com/contact">Liên lạc với chúng tôi</a></li> <li>© 2020 VI.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>