使用 powershell 将 soap 日志文件转换为 csv
convert soap log file to csv using powershell
我一直在寻找一种使用 powershell 将日志文件转换为 csv 的好方法,以便我可以将数据正确导入 Teradata。我以前从未见过这样的文件,所以我将尽力解释。
这是日志文件中的示例
[XXXXX:11aa11a-123-12a4-12a3-12323aabb123:4] 2021-02-05 00:00:00,000: [DEBUG] Somesystem::Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123</ctx:SId>
<ctx:Creation>2021-02-05T00:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>11aa1aa-1aa1-2a22-3aa1-aa1b1233456</ctx:TId>
<ctx:Call>
<ctx:BI>13</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UT>
<wsse:UN>SomesystemUSR</wsse:UN>
<wsse:P>Somepassword</wsse:P>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns5:ListRequest xmlns:ns5="http://Namespace/Service/V1.0" xmlns="http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0" xmlns:ns6="http://Namespace/Core/V1.0" xmlns:ns8="http://Namespace/Service/V1.0" xmlns:ns7="http://Namespace/Core/V1.0" xmlns:ns9="http://Namespace/Core/V1.0"
xmlns:ns10="http://Namespace/Core/Messaging/V1.0" xmlns:ns2="http://Namespace/Enterprise/V1.0" xmlns:ns4="http://Namespace/Core/V1.0" xmlns:ns3="http://Namespace/WarningMessages/V1.0">
<ns4:FromDate>2021-01-28</ns4:FromDate>
<ns4:ToDate>2021-01-28</ns4:ToDate>
<ns4:Code>0123</ns4:Code>
<ns4:Type>U</ns4:Type>
<ns4:Record>S</ns4:Record>
<ns4:AnotherCode>D</ns4:AnotherCode>
</ns5:ListRequest>
</soapenv:Body>
</soapenv:Envelope> (jaxws.LoggingJaxWsHandler) [WContainer : 0] [XXXXX:11aa11a-123-12a4-12a3-12323aabb123BB:4] 2021-02-05 01:00:00,000: [DEBUG] Somesystem::Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123BB</ctx:SId>
<ctx:Creation>2021-02-05T01:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>1as23bb3-1er2-234d-234e-bb8b20995147</ctx:TId>
<ctx:Call>
<ctx:BI>25</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BranchIndex>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://xt-1.0.xsd">
<wsse:UT>
<wsse:UN>SomeUSR</wsse:UN>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<s:ListResponse xmlns:s="http://Namespace/Service/V1.0" xmlns:t="http://Namespace/Core/V1.0" xmlns:m="http://Namespace/Core/Messaging/V1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Namespace/Service/V1.0 ..\Service\V1.0\Response.xsd">
<s:List>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>G</t:Code>
<t:lID>CD456</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>W</t:Code>
<t:lID>EF654</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>P</t:Code>
<t:lID>TR123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>M</t:Code>
<t:lID>AB345</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>C</t:Code>
<t:lID>AB456</t:lID>
</s:FL>
</s:List>
</s:ListResponse>
</soapenv:Body>
</soapenv:Envelope> (jaxws.LoggingJaxWsHandler) [WContainer : 3]
我希望能够以易于导入到 Teradata 中的格式提取数据
UN, SId, Creation, TId, BI, CN, FromDate, ToDate, Code, Type, Record, AnotherCode, FL, Ldate, Iid,......等等
我愿意接受任何关于有更好的方法来获得这个肥皂树的平面结构的建议。如您所见,第二个 SoapEnvelope 在 soapBody 中的数据比第一个多得多。我找不到任何与此类似的问题。
注意:我无法访问命令行
正如 Olaf 所说,可能很难将 xml 转换为平面 csv 记录。 xml 通常由许多 parent/child 对象组成,而 csv 通常是每行单个对象
为了帮助或指导您的进步,您可以尝试使用 xml 信封之一,并通过执行以下操作将其转换为 powershell 中的 xml 对象。
$xml = [xml]@"
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123</ctx:SId>
<ctx:Creation>2021-02-05T00:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>11aa1aa-1aa1-2a22-3aa1-aa1b1233456</ctx:TId>
<ctx:Call>
<ctx:BI>13</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UT>
<wsse:UN>SomesystemUSR</wsse:UN>
<wsse:P>Somepassword</wsse:P>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns5:ListRequest xmlns:ns5="http://Namespace/Service/V1.0" xmlns="http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0" xmlns:ns6="http://Namespace/Core/V1.0" xmlns:ns8="http://Namespace/Service/V1.0" xmlns:ns7="http://Namespace/Core/V1.0" xmlns:ns9="http://Namespace/Core/V1.0"
xmlns:ns10="http://Namespace/Core/Messaging/V1.0" xmlns:ns2="http://Namespace/Enterprise/V1.0" xmlns:ns4="http://Namespace/Core/V1.0" xmlns:ns3="http://Namespace/WarningMessages/V1.0">
<ns4:FromDate>2021-01-28</ns4:FromDate>
<ns4:ToDate>2021-01-28</ns4:ToDate>
<ns4:Code>0123</ns4:Code>
<ns4:Type>U</ns4:Type>
<ns4:Record>S</ns4:Record>
<ns4:AnotherCode>D</ns4:AnotherCode>
</ns5:ListRequest>
</soapenv:Body>
</soapenv:Envelope>
"@
从那里您可以通过向下钻取属性来检查对象的外观
PS Env:\> $xml
Envelope
--------
Envelope
PS Env:\> $xml.Envelope
soapenv Header Body
------- ------ ----
http://schemas.xmlsoap.org/soap/envelope/ Header Body
PS Env:\> $xml.Envelope.Body
ListRequest
-----------
ListRequest
PS Env:\> $xml.Envelope.Body.ListRequest
ns5 : http://Namespace/Service/V1.0
xmlns : http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0
ns6 : http://Namespace/Core/V1.0
ns8 : http://Namespace/Service/V1.0
ns7 : http://Namespace/Core/V1.0
ns9 : http://Namespace/Core/V1.0
ns10 : http://Namespace/Core/Messaging/V1.0
ns2 : http://Namespace/Enterprise/V1.0
ns4 : http://Namespace/Core/V1.0
ns3 : http://Namespace/WarningMessages/V1.0
FromDate : 2021-01-28
ToDate : 2021-01-28
Code : 0123
Type : U
Record : S
AnotherCode : D
这就是我的全部。除了从 xml 对象中挑选出你想要的内容并创建具有这些属性的自定义对象之外,我不知道有什么方法可以将这种类型的多维对象转换为平面 csv。我敢肯定有更聪明的人可以提供更多:)
更新:
因此,为了将这个想法更进一步并解释我创建自定义对象的意思,我创建了这个函数,它将接收 xml 对象并将其转换为具有我从中挑选出的属性的自定义对象xml。之后,您可以使用 ConvertTo-Csv
或 Export-Csv
cmdlet 生成 csv/csv 文件
function Convert-SoapXmlToCustomObject
{
[cmdletbinding()]
param(
[Parameter(ValueFromPipeline = $true, Mandatory = $true)]
[xml[]]$XmlObject
)
Process
{
if ($XmlObject)
{
foreach ($xml in $XmlObject)
{
[pscustomobject][ordered]@{
Sid = $xml.Envelope.Header.App.Session.SId
Creation = $xml.Envelope.Header.App.Session.Creation
Tid = $xml.Envelope.Header.App.IC.TId
Calls = @() #if each call needs to be separate record maybe use loop to create
Username = $xml.Envelope.Header.Security.ut.UN
FromDate = $xml.Envelope.Body.ListRequest.FromDate
ToDate = $xml.Envelope.Body.ListRequest.ToDate
Code = $xml.Envelope.Body.ListRequest.Code
Type = $xml.Envelope.Body.ListRequest.Type
Record = $xml.Envelope.Body.ListRequest.Record
AnotherCode = $xml.Envelope.Body.ListRequest.AnotherCode
}
}
}
}
}
$xml, $xml2 | Convert-SoapXmlToCustomObject | ConvertTo-Csv -NoTypeInformation
输出看起来像这样
"Sid","Creation","Tid","Calls","Username","FromDate","ToDate","Code","Type","Record","AnotherCode"
"11aa11a-123-12a4-12a3-12323aabb123","2021-02-05T00:00:00+11:00","11aa1aa-1aa1-2a22-3aa1-aa1b1233456","System.Object[]","SomesystemUSR","2021-01-28","2021-01-28","0123","U","S","D"
"11aa11a-123-12a4-12a3-12323aabb123BB","2021-02-05T01:00:00+11:00","1as23bb3-1er2-234d-234e-bb8b20995147","System.Object[]","SomeUSR",,,,,,
我一直在寻找一种使用 powershell 将日志文件转换为 csv 的好方法,以便我可以将数据正确导入 Teradata。我以前从未见过这样的文件,所以我将尽力解释。
这是日志文件中的示例
[XXXXX:11aa11a-123-12a4-12a3-12323aabb123:4] 2021-02-05 00:00:00,000: [DEBUG] Somesystem::Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123</ctx:SId>
<ctx:Creation>2021-02-05T00:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>11aa1aa-1aa1-2a22-3aa1-aa1b1233456</ctx:TId>
<ctx:Call>
<ctx:BI>13</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UT>
<wsse:UN>SomesystemUSR</wsse:UN>
<wsse:P>Somepassword</wsse:P>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns5:ListRequest xmlns:ns5="http://Namespace/Service/V1.0" xmlns="http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0" xmlns:ns6="http://Namespace/Core/V1.0" xmlns:ns8="http://Namespace/Service/V1.0" xmlns:ns7="http://Namespace/Core/V1.0" xmlns:ns9="http://Namespace/Core/V1.0"
xmlns:ns10="http://Namespace/Core/Messaging/V1.0" xmlns:ns2="http://Namespace/Enterprise/V1.0" xmlns:ns4="http://Namespace/Core/V1.0" xmlns:ns3="http://Namespace/WarningMessages/V1.0">
<ns4:FromDate>2021-01-28</ns4:FromDate>
<ns4:ToDate>2021-01-28</ns4:ToDate>
<ns4:Code>0123</ns4:Code>
<ns4:Type>U</ns4:Type>
<ns4:Record>S</ns4:Record>
<ns4:AnotherCode>D</ns4:AnotherCode>
</ns5:ListRequest>
</soapenv:Body>
</soapenv:Envelope> (jaxws.LoggingJaxWsHandler) [WContainer : 0] [XXXXX:11aa11a-123-12a4-12a3-12323aabb123BB:4] 2021-02-05 01:00:00,000: [DEBUG] Somesystem::Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123BB</ctx:SId>
<ctx:Creation>2021-02-05T01:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>1as23bb3-1er2-234d-234e-bb8b20995147</ctx:TId>
<ctx:Call>
<ctx:BI>25</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BranchIndex>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://xt-1.0.xsd">
<wsse:UT>
<wsse:UN>SomeUSR</wsse:UN>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<s:ListResponse xmlns:s="http://Namespace/Service/V1.0" xmlns:t="http://Namespace/Core/V1.0" xmlns:m="http://Namespace/Core/Messaging/V1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Namespace/Service/V1.0 ..\Service\V1.0\Response.xsd">
<s:List>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>G</t:Code>
<t:lID>CD456</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>W</t:Code>
<t:lID>EF654</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>P</t:Code>
<t:lID>TR123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:lDate>2021-01-05</t:lDate>
<t:Code>N</t:Code>
<t:lID>AB123</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>M</t:Code>
<t:lID>AB345</t:lID>
</s:FL>
<s:FL>
<t:Date>2021-01-05</t:Date>
<t:Code>C</t:Code>
<t:lID>AB456</t:lID>
</s:FL>
</s:List>
</s:ListResponse>
</soapenv:Body>
</soapenv:Envelope> (jaxws.LoggingJaxWsHandler) [WContainer : 3]
我希望能够以易于导入到 Teradata 中的格式提取数据
UN, SId, Creation, TId, BI, CN, FromDate, ToDate, Code, Type, Record, AnotherCode, FL, Ldate, Iid,......等等
我愿意接受任何关于有更好的方法来获得这个肥皂树的平面结构的建议。如您所见,第二个 SoapEnvelope 在 soapBody 中的数据比第一个多得多。我找不到任何与此类似的问题。
注意:我无法访问命令行
正如 Olaf 所说,可能很难将 xml 转换为平面 csv 记录。 xml 通常由许多 parent/child 对象组成,而 csv 通常是每行单个对象
为了帮助或指导您的进步,您可以尝试使用 xml 信封之一,并通过执行以下操作将其转换为 powershell 中的 xml 对象。
$xml = [xml]@"
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<ctx:App xmlns:ctx="http://namespace">
<ctx:Session>
<ctx:UN>XXXXX</ctx:UN>
<ctx:SId>11aa11a-123-12a4-12a3-12323aabb123</ctx:SId>
<ctx:Creation>2021-02-05T00:00:00+11:00</ctx:Creation>
</ctx:Session>
<ctx:IC>
<ctx:TId>11aa1aa-1aa1-2a22-3aa1-aa1b1233456</ctx:TId>
<ctx:Call>
<ctx:BI>13</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
</ctx:Call>
<ctx:Call>
<ctx:BI>1</ctx:BI>
<ctx:CN>Somesystem</ctx:CN>
<ctx:CL>UnknownLocation</ctx:CL>
</ctx:Call>
<ctx:Call>
<ctx:BI>0</ctx:BI>
</ctx:Call>
</ctx:IC>
</ctx:App>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UT>
<wsse:UN>SomesystemUSR</wsse:UN>
<wsse:P>Somepassword</wsse:P>
</wsse:UT>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ns5:ListRequest xmlns:ns5="http://Namespace/Service/V1.0" xmlns="http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0" xmlns:ns6="http://Namespace/Core/V1.0" xmlns:ns8="http://Namespace/Service/V1.0" xmlns:ns7="http://Namespace/Core/V1.0" xmlns:ns9="http://Namespace/Core/V1.0"
xmlns:ns10="http://Namespace/Core/Messaging/V1.0" xmlns:ns2="http://Namespace/Enterprise/V1.0" xmlns:ns4="http://Namespace/Core/V1.0" xmlns:ns3="http://Namespace/WarningMessages/V1.0">
<ns4:FromDate>2021-01-28</ns4:FromDate>
<ns4:ToDate>2021-01-28</ns4:ToDate>
<ns4:Code>0123</ns4:Code>
<ns4:Type>U</ns4:Type>
<ns4:Record>S</ns4:Record>
<ns4:AnotherCode>D</ns4:AnotherCode>
</ns5:ListRequest>
</soapenv:Body>
</soapenv:Envelope>
"@
从那里您可以通过向下钻取属性来检查对象的外观
PS Env:\> $xml
Envelope
--------
Envelope
PS Env:\> $xml.Envelope
soapenv Header Body
------- ------ ----
http://schemas.xmlsoap.org/soap/envelope/ Header Body
PS Env:\> $xml.Envelope.Body
ListRequest
-----------
ListRequest
PS Env:\> $xml.Envelope.Body.ListRequest
ns5 : http://Namespace/Service/V1.0
xmlns : http://www.immi.gov.au/Namespace/Enterprise/ErrorMessages/V1.0
ns6 : http://Namespace/Core/V1.0
ns8 : http://Namespace/Service/V1.0
ns7 : http://Namespace/Core/V1.0
ns9 : http://Namespace/Core/V1.0
ns10 : http://Namespace/Core/Messaging/V1.0
ns2 : http://Namespace/Enterprise/V1.0
ns4 : http://Namespace/Core/V1.0
ns3 : http://Namespace/WarningMessages/V1.0
FromDate : 2021-01-28
ToDate : 2021-01-28
Code : 0123
Type : U
Record : S
AnotherCode : D
这就是我的全部。除了从 xml 对象中挑选出你想要的内容并创建具有这些属性的自定义对象之外,我不知道有什么方法可以将这种类型的多维对象转换为平面 csv。我敢肯定有更聪明的人可以提供更多:)
更新:
因此,为了将这个想法更进一步并解释我创建自定义对象的意思,我创建了这个函数,它将接收 xml 对象并将其转换为具有我从中挑选出的属性的自定义对象xml。之后,您可以使用 ConvertTo-Csv
或 Export-Csv
cmdlet 生成 csv/csv 文件
function Convert-SoapXmlToCustomObject
{
[cmdletbinding()]
param(
[Parameter(ValueFromPipeline = $true, Mandatory = $true)]
[xml[]]$XmlObject
)
Process
{
if ($XmlObject)
{
foreach ($xml in $XmlObject)
{
[pscustomobject][ordered]@{
Sid = $xml.Envelope.Header.App.Session.SId
Creation = $xml.Envelope.Header.App.Session.Creation
Tid = $xml.Envelope.Header.App.IC.TId
Calls = @() #if each call needs to be separate record maybe use loop to create
Username = $xml.Envelope.Header.Security.ut.UN
FromDate = $xml.Envelope.Body.ListRequest.FromDate
ToDate = $xml.Envelope.Body.ListRequest.ToDate
Code = $xml.Envelope.Body.ListRequest.Code
Type = $xml.Envelope.Body.ListRequest.Type
Record = $xml.Envelope.Body.ListRequest.Record
AnotherCode = $xml.Envelope.Body.ListRequest.AnotherCode
}
}
}
}
}
$xml, $xml2 | Convert-SoapXmlToCustomObject | ConvertTo-Csv -NoTypeInformation
输出看起来像这样
"Sid","Creation","Tid","Calls","Username","FromDate","ToDate","Code","Type","Record","AnotherCode"
"11aa11a-123-12a4-12a3-12323aabb123","2021-02-05T00:00:00+11:00","11aa1aa-1aa1-2a22-3aa1-aa1b1233456","System.Object[]","SomesystemUSR","2021-01-28","2021-01-28","0123","U","S","D"
"11aa11a-123-12a4-12a3-12323aabb123BB","2021-02-05T01:00:00+11:00","1as23bb3-1er2-234d-234e-bb8b20995147","System.Object[]","SomeUSR",,,,,,