2017-04-13 8 views
5
करने के लिए XML परिवर्तित

मैं निम्नलिखित कोड का उपयोग करके सीएसवी करने के लिए XML परिवर्तित करने में सक्षम था:Powershell - सीएसवी

#read from file 
[xml]$inputFile = Get-Content "c:\pstest\test.xml" 
#export xml as csv 
$inputFile.Transaction.ChildNodes | Export-Csv "c:\pstest\test.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8 

यह काम करता है, तो फ़ाइलों बच्चे नोड्स का एक प्रकार, उदाहरण के लिए के साथ केवल एक रूट नोड होते हैं:

<?xml version="1.0" encoding="UTF-8"?> 
<Transaction> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>1</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515552017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>2</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515622017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>3</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515972017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
</Transaction> 

उत्पादन होगा जैसे:

"RecordID";"SequenceNumber";"TransactionType";"ActionCode";"TransactionID";"SellerCode";"BuyerCode";"TransactionReference";"TransactionDescription1";"TransactionDescription2";"DocumentType";"DocumentNumber";"DocumentDate";"DocumentAmount";"CurrencyCode";"TransactionAmount";"TransactionDueDate";"AdditionalInformation1";"AdditionalInformation2";"HashCode" 
"02";"1";"01";"01";"17500515552017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 
"02";"2";"01";"01";"17500515622017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 
"02";"3";"01";"01";"17500515972017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 

कौन महान है।

हालांकि, वास्तविकता में इनपुट फ़ाइल एक "शीर्षक लाइन" जानकारी, TXNHEAD टैग है

<?xml version="1.0" encoding="UTF-8"?> 
<Transaction> 
    <TXNHEAD> 
     <RecordID>01</RecordID> 
     <FileName>001</FileName> 
     <IntermediaryCode>19000033</IntermediaryCode> 
     <ActualizationDate>20170314</ActualizationDate> 
     <SequenceNumber>001</SequenceNumber> 
     <NumberofRecords>3</NumberofRecords> 
     <AmountofRecords>30000</AmountofRecords> 
    </TXNHEAD> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>1</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515552017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>2</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515622017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
    <TXNDETAIL> 
     <RecordID>02</RecordID> 
     <SequenceNumber>3</SequenceNumber> 
     <TransactionType>01</TransactionType> 
     <ActionCode>01</ActionCode> 
     <TransactionID>17500515972017001</TransactionID> 
     <SellerCode>2200919TRY</SellerCode> 
     <BuyerCode>KOCZER</BuyerCode> 
     <TransactionReference> </TransactionReference> 
     <TransactionDescription1> </TransactionDescription1> 
     <TransactionDescription2> </TransactionDescription2> 
     <DocumentType>01</DocumentType> 
     <DocumentNumber>XXXXXXXXXXX</DocumentNumber> 
     <DocumentDate>20170301</DocumentDate> 
     <DocumentAmount>10000</DocumentAmount> 
     <CurrencyCode>949</CurrencyCode> 
     <TransactionAmount>10000</TransactionAmount> 
     <TransactionDueDate>20170505</TransactionDueDate> 
     <AdditionalInformation1> </AdditionalInformation1> 
     <AdditionalInformation2> </AdditionalInformation2> 
     <HashCode>XXXXXXXX</HashCode> 
    </TXNDETAIL> 
</Transaction> 

जब एक ही कोड को लागू करने, मैं मिलता है:

"RecordID";"FileName";"IntermediaryCode";"ActualizationDate";"SequenceNumber";"NumberofRecords";"AmountofRecords" 
"01";"001";"19000033";"20170314";"001";"3";"30000" 
"02";;;;"1";; 
"02";;;;"2";; 
"02";;;;"3";; 

जब मैं इस कोशिश कर रहा हूँ

#read from file 
[xml]$inputFile = Get-Content "c:\pstest\test.xml" 
#export xml as csv 
$inputFile.Transaction.TXNHEAD.ChildNodes | Export-Csv "c:\pstest\test.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8 

मैं: कोड के बजाय सिर्फ सिर को पुनः प्राप्त करने

+०१२३५१६४१०६१

"RecordID";"FileName";"IntermediaryCode";"ActualizationDate";"SequenceNumber";"NumberofRecords";"AmountofRecords" 
"01";"001";"19000033";"20170314";"001";"3";"30000" 
"RecordID";"SequenceNumber";"TransactionType";"ActionCode";"TransactionID";"SellerCode";"BuyerCode";"TransactionReference";"TransactionDescription1";"TransactionDescription2";"DocumentType";"DocumentNumber";"DocumentDate";"DocumentAmount";"CurrencyCode";"TransactionAmount";"TransactionDueDate";"AdditionalInformation1";"AdditionalInformation2";"HashCode" 
"02";"1";"01";"01";"17500515552017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 
"02";"2";"01";"01";"17500515622017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 
"02";"3";"01";"01";"17500515972017001";"2200919TRY";"KOCZER";"";"";"";"01";"XXXXXXXXXXX";"20170301";"10000";"949";"10000";"20170505";"";"";"XXXXXXXX" 

क्या मैं गलत कर रहा हूँ:

"#text" 
"01" 
"001" 
"19000033" 
"20170314" 
"001" 
"3" 
"30000" 

मैं क्या हासिल करने की कोशिश कर रहा हूँ, यह उत्पादन है?

उत्तर

2

पाइपलाइन में पहली ऑब्जेक्ट (या Select-Object इत्यादि) आउटपुट के लिए हेडर को परिभाषित करता है चाहे वह फ़ाइल या कंसोल आउटपुट हो।

आप क्या कर सकते हैं उन्हें दो राउंड में सीएसवी में परिवर्तित कर सकते हैं और इसे उसी फ़ाइल में जोड़ सकते हैं। उदाहरण के लिए: वह जानकारी लिखें सीएसवी में उपस्थित होने के लिए, बेहतर `NoTypeInformation` ध्वज शामिल नहीं चाहता है के बाद से

$inputFile.Transaction.TXNHEAD, $x.Transaction.TXNDETAIL | 
ForEach-Object { $_ | ConvertTo-Csv -NoTypeInformation -Delimiter ";" } | 
Set-Content -Path "c:\pstest\test.csv" -Encoding UTF8 
+0

:

$inputFile.Transaction.TXNHEAD | ConvertTo-Csv -NoTypeInformation -Delimiter ";" | Set-Content -Path "c:\pstest\test.csv" -Encoding UTF8 $inputFile.Transaction.TXNDETAIL | ConvertTo-Csv -NoTypeInformation -Delimiter ";" | Add-Content -Path "c:\pstest\test.csv" -Encoding UTF8 

तुम भी इस तरह से उन्हें जोड़ सकते हैं। – Vesper

+0

वह नहीं करता है। फिर से पढ़ें –

+1

हम्म। उन्होंने कहा: "मैं निम्नलिखित आउटपुट चाहता हूं:" और आउटपुट में 'रिकॉर्ड आईडी' से शुरू होने वाली प्रकार की जानकारी पंक्ति होती है। प्रश्न में अंतिम कोड ब्लॉक की जांच करें। – Vesper