Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पर्ल और XPath:डेटाबेस तालिका में अनुपलब्ध प्रविष्टियाँ

आपके पास पहले से ही एक स्पष्टीकरण और एक सुधार है, लेकिन मैं निम्नलिखित परिवर्तनों का सुझाव देता हूं

  • आपको prepare करना चाहिए INSERT INTO SQL कथन और फिर execute यह पाश के भीतर। do बहुत बड़ा उपरि है

  • // ( descendant-or-self::node() ) XPath निर्माण महंगा है और आपको इसे उन मामलों के लिए आरक्षित करना चाहिए जहां आपको पता नहीं है कि तत्व दस्तावेज़ के भीतर कहां होगा, जो बहुत दुर्लभ है। इस मामले में row1 तत्व /database/row1s/row1 . पर हैं और row2 तत्व row2s/row2 . पर हैं उसके सापेक्ष

  • यदि आप उद्धृत स्ट्रिंग के भीतर उद्धरण वर्णों का उपयोग करना चाहते हैं, तो विभिन्न सीमांकक का उपयोग करना अधिक स्पष्ट है। उदाहरण के लिए "My name is \"$name\"" . है qq{My name is "$name"} . के रूप में बहुत बेहतर है

यहां आपके कार्यक्रम का एक संस्करण है जो मदद कर सकता है।

use strict;
use warnings;

use XML::XPath;
use DBI;

my $xp = XML::XPath->new( filename => 'animals4.xml' );

my $dbh = DBI->connect(
   'DBI:mysql:test', 'user', 'pw',
   { RaiseError => 1, PrintError => 0}
) or die "Fehler beim Verbidungsaufbau zum MariaDB-Server: $DBI::err -< $DBI::errstr\n";

my $insert_animal = $dbh->prepare('INSERT INTO animal4 (name, category, type, size) VALUES (?, ?, ?, ?)');

for my $row1 ( $xp->findnodes('/database/row1s/row1') ) {

   my $name     = $row1->getAttribute('name');
   my $category = $row1->getAttribute('category');

   printf qq{Level --- row1 "name" gives: $name\n};

   my @row2 = $xp->findnodes('row2s/row2', $row1);

   if ( @row2 ) {
      for my $row2 ( @row2 ) {

         my $type = $row2->getAttribute('type');
         my $size = $row2->getAttribute('size');

         print qq{Level row2 "type" gives: $type\n};
         print qq{Level row2 "size" gives: $size\n};

         $insert_animal->execute($name, $category, $type, $size);
      }
   }
   else {
      $insert_animal->execute($name, $category, undef, undef);
   }
}

आउटपुट

Level --- row1 "name" gives: fox
Level row2 "type" gives: 1
Level row2 "size" gives: 10
Level row2 "type" gives: 2
Level row2 "size" gives: 8
Level --- row1 "name" gives: horse
Level row2 "type" gives: 3
Level row2 "size" gives: 100
Level --- row1 "name" gives: bee
Level --- row1 "name" gives: wasp


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब कुछ स्तंभों के अलग-अलग मान होते हैं, तो संघ से परिणाम एक पंक्ति में मिलते हैं

  2. अपरिभाषित अनुक्रमणिका:REMOTE_ADDR जबकि Laravel माइग्रेट

  3. प्रोग्राम के कुछ हिस्सों में स्पष्ट रूप से MySQL क्वेरी कैश को अक्षम करें

  4. सम्मिलित बैच का समय क्यों बढ़ रहा है?

  5. 127.0.0.1:3306 पर mysql से कनेक्ट करने में विफल उपयोगकर्ता रूट एक्सेस के साथ उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करके:हाँ)