Ana içeriğe geç

ImportFromXml

XML verilerini belirtilen tabloya aktarır. Daha fazla bilgi için bkz. DataTable.ImportFromXml.

1
$Database.ImportFromXml(query: QueryWithMappings):DataTable

Parametreler

QueryWithMappings sorgu
    İçe aktarma parametrelerini tanımlayan sorgu nesnesi.

Döndürür

İçe aktarılan verileri temsil eden DataTable iş akışı.

Notlar

Bu yöntem, şu yöntemler için bir sarmalayıcıdır: DataTable.ImportFromXml ve DataTable.Save .

XML veri modelinizin ve SQL tablo sütunlarınızın tasarımı, kullanım kolaylığı açısından önemlidir. XML düğümü ve tablo sütunu adları aynı olduğunda bu yöntem bunları otomatik olarak eşler.

Eşleme işlevi Bir eşleme işlevi, değerleri kaydetmeden önce dönüştürmek için kullanılabilir; örneğin, veritabanına kaydetmeden önce bir parolayı şifrelemek için. Daha fazla bilgi için bkz. $Database.ExportToXml .

Örnek

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$Database.ImportFromXml({
    TargetSchema : 'Edoksis',
    TargetTable : 'Accounts',
    XPath : 'Accounts/Account',
    Map : function (xml) {
        var pass = xml.Evaluate('Password');
        // if not marked as encrypted (means user has edited the password field) encrypt it
        if (!pass.startsWith('Enc:'))
            this.Password = $Crypto.Encrypt($EncryptionPassword, this.Id, xml.Evaluate('Password'));
        else // otherwise just remove the mark
            this.Password = pass.substr(4);
    }
});

Veri içe aktarmaya yönelik yaygın kullanım durumu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Assume this is your XML data
// <Root>
//   <Questions>
//     <Question>
//        <Id>145</Id>
//        <Text>What is your favorite product?</Text>
//     </Question>
//     <Question>
//        <Id>146</Id>
//        <Text>Where did you hear about it?</Text>
//     </Question>
//   </Questions>
// </Root>

$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Poll',
        TargetTable : 'Questions'
    },
    XPath : 'Questions/Question'
});

// Each "Question" node gets saved into the "Questions" table,
// mapping the inner XML content to the related columns on the table.

Özelleştirilmiş sütun güncellemesi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Save organization unit positions
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : "HR",
        TargetTable : "OrganizationUnitPositions"
    },
    XPath : "//OrganizationUnitPositions/OrganizationUnitPosition",
    Map : function (xml) {
        // Update position by parent node id
        this.Position = xml.Evaluate('../../Id');
    }
});

Info

Varsayılan olarak, eşleşen tüm sütunlar ve veri modeli öğeleri ada göre otomatik olarak güncellenir. Tablo sütunlarınızın ve veri modeli adlarınızın farklı olması durumunda, sütunları veri modelinize el ile eşlemek için bir Map işlev sağlayabilirsiniz.

Yalnızca seçili sütunları güncelle

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Poll',
        TargetTable : 'Questions'
    },
    Columns : [
        {Name : 'Id'},
        {Name : 'Content'},
        {Name : 'Number'},
        {Name : 'Type'}
    ],
    XPath : 'Questions/Question',
    Map : function (node) {
        this.Column('MyId', node.Evaluate('Id'));
        this.Column('MyContent', node.Evaluate('Content'));
        this.Column('MyNumber', node.Evaluate('Number'));
        this.Column('MyType', node.Evaluate('Type'));
    }
});

İç içe ekleme ve güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$Database.ImportFromXml({                                                                        // Save employee
   Parameters : {
       TargetSchema : 'HR',
       TargetTable : 'Employee'
   },
   XPath : 'Identities/Identity',                                                                // Find rows under Identities/Identity xpath
   ColumnsXPath : 'Employee',                                                                    // Fetch column values from Employee. Final xpath
   Map : function(employeeNode) {

       $Database.Get({                                                                           // Fetch matching records from database
           Parameters : {
               TargetSchema : 'HR',
               TargetTable : 'OrganizationUnitPositionMembers'
           },
           Where : {
             Criteria : [
               { Name : 'Employee', Value : employeeNode.Evaluate('Id') },                       // "Employee must equal to Employee/Id xpath value."
               { Name : 'RegistryNumber', Value : '%2', Comparison : 'Like', Condition : 'Or' }  // Another sample criterion: "or RegistryNumber must end with 2"
             ]
           }
       })
       .DeleteAll()                                                                              // Delete all existing rows
       .CreateNew(function() {                                                                   // Create a new row
           this.Employee = employeeNode.Evaluate('Id');                                          // Set Employee column to "Employee/Id" xpath value.
           this.OrganizationUnitPosition = employeeNode.Evaluate('Employee/Position');           // Set OrganizationUnitPosition column to "Employee/Position" xpath value.
       })
       .Save();                                                                                  // Save the table.
  }
});

Alt sorgularla sütun güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// Save corporations with the subcorporations
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Document',
        TargetTable : 'Corporations'
    },
    XPath : 'Corporations/Corporation',
    SubQueries : [
        {Name : 'SubCorporations'}
    ]
});

Form verileriniz olarak aşağıdaki XML'nin ve iki SQL tablonuzun bulunduğunu varsayalım:

Corporations ve SubCorporations tablosundan Corporations tablosuna, ayrıca adı da SubCorporations olan bire çok ilişkisi. SubCorporations .

Warning

Alt sorgularla güncelleme yapmak için bu ilişkinin güncelleme kuralını "Cascade" olarak ayarlamayı unutmayın.

SubCorporations ilişkili SQL tablosuna kaydetmenizi sağlar.

Form XML örneği

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<GeneralDefinitions>
  <Corporations>
     <Corporation>
        <Id>9b7383a3-67ae-4fed-a135-1f981b165c43</Id>
        <Name>Corporation A</Name>
        <ShortName>CorpA</ShortName>
        <SubCorporations>
           <SubCorporation>
              <Id>309069b4-4274-4063-b7ad-75c5657d7474</Id>
              <Name>SubCorporation A 1</Name>
              <ShortName>SubCorpA1</ShortName>
           </SubCorporation>
           <SubCorporation>
              <Id>6ba3cc79-9ff7-4232-8f61-9245a38fd2bb</Id>
              <Name>SubCorporation A 2</Name>
              <ShortName>SubCorpA2</ShortName>
           </SubCorporation>
        </SubCorporations>
     </Corporation>
     <Corporation>
        <Id>5a900112-a869-41cf-931c-7379c1df518e</Id>
        <Name>Corporation B</Name>
        <ShortName>CorpB</ShortName>
        <SubCorporations>
           <SubCorporation>
              <Id>8e7ca6d2-5629-4f87-82ed-73c72cfb171e</Id>
              <Name>SubCorporation B 1</Name>
              <ShortName>SubCorpB1</ShortName>
           </SubCorporation>
           <SubCorporation>
              <Id>7c5f330e-68d8-45f0-800e-04e2f7e035e0</Id>
              <Name>SubCorporation B 2</Name>
              <ShortName>SubCorpB2</ShortName>
           </SubCorporation>
        </SubCorporations>
     </Corporation>
  </Corporations>
</GeneralDefinitions>

Ayrıca bkz.