2011-10-04 18 views
5

Bir if_ixml_document öğesinin tüm düğümleri boyunca geçiş yapmak istiyorum. Bunu yapmanın en iyi yolu hangisi?Abap - Bir xml belgesinin tüm düğümlerini mi geçiyorsunuz?

Lütfen örnek belgeyi bulun. Bu belgede

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

i

cevap

2

extensive XML manual on SAP's documentation website (bağlantının düzgün çalışmadığı durumda, help.sap.com numaralı NetWeaver Geliştirici Kılavuzu'na gidin ve 'xml kitaplığı' için arama yapın) bulabilirsiniz.

'iXML ABAP Nesneleri Hızlı Başlatma' bölümü hızlıca başlamanızı sağlamalıdır.

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

Sen uygulanmalıdır DocumentTraversal arayüzü kullanabilirsiniz önceden düğümler aracılığıyla <text>, <id>, <guid> , <title>, <short_title>, <bold> vb

Teşekkür travers

Saygılarımızla, Alex ihtiyaç Herhangi bir DOM kitaplığı tarafından (Xerces'in sahip olduğu):

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

sorudur ABAP sorusu olarak işaretlenmiş, bu yüzden ABAP dili için olduğunu varsayalım. Belki @ user871912 sadece onaylayabilir. – mydoghasworms

+0

@mydoghasworms. Verilen. Yine de, ABAP aynı arayüzleri destekliyor olsa da * biraz * farklı sözdizimi :-) –

4

İlk adım, XML'inizi aşağıdaki gibi ayrıştırmaktır. Elbette dizeye bir dosyadan XML yükleyebilirsiniz, ama bu sadece bir örnektir:

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

Artık XML belgesinin kökü işaret IF_XML_NODE bir örneğini var. Artık XML ağacını çaprazlamak ve GET_CHILDREN, GET_ATTRIBUTES, GET_NAME vb. Gibi çeşitli yöntemleri kullanarak çeşitli değerlerden yararlanabileceğiniz çeşitli yöntemler kullanabilirsiniz.

Verimlilik için oldukça küçük XML belgeleri için bu yeterli olacaktır. Belirli bir düğüm kümesi arıyorsanız, bir XPATH sorgusu kullanarak bakmak isteyebilirsiniz.

+0

cevabınız için teşekkürler. İlk olarak, herhangi bir özel düğüm grubu aramıyorum. Bazı koşullardaki tüm elemanların nitelik değerini değiştirmek gibi çok genel bir yöntem yazıyorum. Bu koddan, kesinlikle kök düğümünü alacağım. ama get_children gibi yöntemler kullanıyorumdan sonra, sadece kök düğümün hemen çocuğunu alacağım. Örnek belgede, ve öğelerini alacağım ama çocuğu bunlara dahil etmeyeceğim. Belgedeki tüm öğeleri geçebilecek bir yöntem arıyorum. – <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">Doğru, size sadece acil çocukları veriyor. Yapmanız gereken şey, tüm belgeyi gözden geçirmek için tekrarlayıcı bir alt program yazmaktır. Umarım yakında size bir örnek vereceğim. – <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>Ben durumu şöyle açıklamak mümkündür örneği aşağıdaki umut:</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>Enjoy, Alexander 'tam DOM ağacının üzerinde yineleme' paragraf Aşağıdaki örnek kodu sağlar.</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">kaynak</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>El ile xml geçişi değişen ortamlarda hataya ve karmaşıklığa neden olur. Doğrudan kod geçişine ihtiyacınız olup olmadığını kontrol etmek isteyebilirsiniz.</p> <p>(XSLT) dönüştürmeleri yardımıyla, XML'i ABAP yapılandırılmış türlerine dönüştürebilirsiniz. XPath desteklenmektedir.</p> <p>Dönüşümlerin bildirimi, sınanması ve hata ayıklaması, <code class="prettyprint-override">STRANS</code> numaralı işlem tarafından açılan Dönüştürme Düzenleyicisi kullanılarak yapılır.</p> <p>XSLT dönüşüm türü olarak mevcuttur: senin ABAP Kodu <a href="http://help.sap.com/abapdocu_70/en/ABENABAP_XSLT.htm" rel="nofollow">ABAP XSLT Transformation</a></p> <p>sadece arayacak dil elemanı <code class="prettyprint-override">CALL TRANSFORMATION</code> ve veri sonradan hedef yapısında işlemeye hazır: <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">kaynak</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=1644592048964"></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"> Son soru </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://tr.uwenku.com/question/p-csdcmhon-t.html" target="_blank" title=".."> .. </a> </li> <li class="side_article_list_item"> 2. <a href="http://tr.uwenku.com/question/p-tapvjtsc-p.html" target="_blank" title="RegEx, karakterle başlarsa eşleşmiyor mu?</p> <p><code>/(((\w+)|(\.\w+)|(\#\w+)|\*)(\[(.+(=".+"|\*".+"|\^".+"|))\])?(::|:)?)+(?=[ \S]*\{)/gm</code></p> <p>CSS seçicileri maç için kullanmaya çalışıyorum:"> RegEx, karakterle başlarsa eşleşmiyor mu?</p> <p><code>/(((\w+)|(\.\w+)|(\#\w+)|\*)(\[(.+(=".+"|\*".+"|\^".+"|))\])?(::|:)?)+(?=[ \S]*\{)/gm</code></p> <p>CSS seçicileri maç için kullanmaya çalışıyorum: </a> </li> <li class="side_article_list_item"> 3. <a href="http://tr.uwenku.com/question/p-ssvupldh-o.html" target="_blank" title="dolgu sütunu NA"> dolgu sütunu NA </a> </li> <li class="side_article_list_item"> 4. <a href="http://tr.uwenku.com/question/p-huvlweig-y.html" target="_blank" title="Web.config çalışmıyor"> Web.config çalışmıyor </a> </li> <li class="side_article_list_item"> 5. <a href="http://tr.uwenku.com/question/p-qfnmesio-u.html" target="_blank" title="Statik olarak bağlantılı ikili dosyada eksiklik hata ayıklama sembolleri"> Statik olarak bağlantılı ikili dosyada eksiklik hata ayıklama sembolleri </a> </li> <li class="side_article_list_item"> 6. <a href="http://tr.uwenku.com/question/p-pahzkbhg-s.html" target="_blank" title="Android Bir glif oluşturmak için birden çok adımın IME'si"> Android Bir glif oluşturmak için birden çok adımın IME'si </a> </li> <li class="side_article_list_item"> 7. <a href="http://tr.uwenku.com/question/p-khrjcmgt-a.html" target="_blank" title="Firefox Sürüm 57'de nasıl kesilmiş console.log çıkışı genişletilebilir?"> Firefox Sürüm 57'de nasıl kesilmiş console.log çıkışı genişletilebilir? </a> </li> <li class="side_article_list_item"> 8. <a href="http://tr.uwenku.com/question/p-mxhvumoj-g.html" target="_blank" title="İki Akış nasıl yan yana oluşturulur?"> İki Akış nasıl yan yana oluşturulur? </a> </li> <li class="side_article_list_item"> 9. <a href="http://tr.uwenku.com/question/p-eabbjbdy-m.html" target="_blank" title="Android Oreo Bildirimi Çöküyor Sistem UI"> Android Oreo Bildirimi Çöküyor Sistem UI </a> </li> <li class="side_article_list_item"> 10. <a href="http://tr.uwenku.com/question/p-sgrumvwh-q.html" target="_blank" title="Service in vue2JS - oluşturulmuş kanca hatası"> Service in vue2JS - oluşturulmuş kanca hatası </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> İlgili konular</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">İlgili sorun yok^_^</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://tr.uwenku.com/contact">Bize ulaşın</a></li> <li>© 2020 TR.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>