使用PowerShell从XML文件中提取部分

时间:2015-08-03 14:53:10

标签: powershell powershell-v2.0

鉴于以下XML文件结构,为什么我的代码不起作用?我只想提取出这些字段,以便我可以重命名XML文件,如下所示:

SB90634111_TYPE_20150803_PAY.xml

<?xml version="1.0"?>
<Proponix>
    <Header>
        <DestinationID>ABC</DestinationID>
        <SenderID>PRO</SenderID>
        <ClientBank>ABC</ClientBank>
        <OperationOrganizationID>ABCD</OperationOrganizationID>
        <MessageType>TYPE</MessageType>
        <DateSent>20150802</DateSent>
        <TimeSent>135244</TimeSent>
        <MessageID>1073459900</MessageID>
    </Header>
    <SubHeader>
        <InstrumentID>SB90634111</InstrumentID>
        <InstrumentStatus>ACT</InstrumentStatus>
        <ActivityType>PAY</ActivityType>
        <BusinessDate>20150803</BusinessDate>  
    </SubHeader>
</Proponix>


$xml = [xml](Get-Content 'my.xml')
$xml.Proponix | ? {$_.ID -eq 'Header'} | write-output MessageType
$xml.Proponix | ? {$_.ID -eq 'Subheader'} | write-output InstrumentID,ActivityType,BusinessDate

如果重要的话,我在Windows 7 Pro上运行Powershell 2.0。

1 个答案:

答案 0 :(得分:2)

您可以使用$xml.Proponix.Header

访问标题元素
$xml.Proponix.Header | Select MessageType
$xml.Proponix.SubHeader | Select InstrumentID,ActivityType,BusinessDate

以下是使用格式字符串重命名文件的完整示例:

$path =  'c:\my.xml'

$xml = [xml](Get-Content $path)

$newFileName = '{0}_{1}_{2}_{3}.xml' -f `
    $xml.Proponix.SubHeader.InstrumentID,
    $xml.Proponix.Header.MessageType, 
    $xml.Proponix.SubHeader.BusinessDate, 
    $xml.Proponix.SubHeader.ActivityType


Rename-Item $path $newFileName