मैं किसी तृतीय पक्ष xml को संशोधित करने का प्रयास कर रहा हूं ताकि सभी तत्वों में आईडी को टी-एसक्यूएल से संशोधित किया जा सके।उसी स्तर में xml नोड्स को आईडी असाइन कैसे करें
यह मूल एक्सएमएल (खंड) है:
<Tables>
<Table Type="LineItem">
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">244234</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">RENT RECEIVABLE - INTERNAL</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">4522.89</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">56666</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">150021</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">Rent Building 1</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">456.37</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">2805.00</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">2342341</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">Rent Building 2</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">355</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">6900</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
</Table>
<Table Type="BankAccountTable" />
<Table Type="VATTable" />
</Tables>
आप देख सकते हैं, <Table>
तत्वों ईद की जरूरत नहीं है, तो बाद में इस प्रक्रिया में उन्हें पहचान करना मुश्किल है।
मैं सभी <Table>
तत्वों के माध्यम से जाने के लिए और इस तरह एक टुकड़ा निष्पादित करने के लिए एक पाश बनाने के लिए करना चाहते हैं:
set @xml.modify('
insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[sql:variable("@id")]')
समस्या पिछले एसक्यूएल चर पर स्थित है, त्रुटि है:
XQuery [modify()]: Only 'http://www.w3.org/2001/XMLSchema#decimal?', 'http://www.w3.org/2001/XMLSchema#boolean?' or 'node()*' expressions allowed as predicates, found 'xs:string ?'
यह ठीक काम करता है, लेकिन मैं हमेशा एक ही पंक्ति (संख्या 1) को बदलना नहीं चाहता हूं।
set @xml.modify('
insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[1]')
वैसे, अगर मैं इस तरह के रूप के बजाय एक पूर्णांक चर का उपयोग एक स्ट्रिंग की:
set @xml.modify('insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[sql:variable("@idInt")]')`
मैं एक त्रुटि मिलती है:
XQuery [modify()]: The target of 'insert' must be a single node, found 'element(TableRow,xdt:untyped) *
शानदार! एक आकर्षण की तरह काम किया, यह स्पष्ट नहीं था, क्योंकि [1] तत्व की स्थिति को इंगित करने के लिए भी इस्तेमाल किया जा सकता है। – checamon