如何使用PowerShell解析此xml?
问题描述:
我需要一些正则表达式帮助从日志文件中解析出PowerShell对象。如何使用PowerShell解析此xml?
寻找使这些注释属性,PowerShell的对象:
ACVS_D = Date
ACVS_TI = Info
ACVS_C = Name
ACVS_M = Message
任何帮助将不胜感激!谢谢!
在.log文件的XML实例:
<ACVS_T>
<ACVS_D>12/23/2016 03:25:14.324</ACVS_D>
<ACVS_TI>db818c30-cdb9-4482-9b51-8f6aad8e914c,C?Cure Reports Server Component,svc-ccureMAS</ACVS_TI>
<ACVS_C>CrossFireWindowsService</ACVS_C>
<ACVS_S>SoftwareHouse.CrossFire.Server.Shared.CrossFireWindowsService.TraceMessage(String methodName, String message)
</ACVS_S>
<ACVS_M>
CrossFireReportServer.ReconnectToServer() connected at 12/23/2016 3:25:14 AM
</ACVS_M>
<ACVS_ST>
</ACVS_ST>
</ACVS_T>
<ACVS_T>
<ACVS_D>12/23/2016 03:25:14.324</ACVS_D>
<ACVS_TI>6af6dfab-c890-42c5-acd2-a9520e9742da,C?Cure Reports Server Component,svc-ccureMAS</ACVS_TI>
<ACVS_C>CrossFireWindowsService</ACVS_C>
<ACVS_S>SoftwareHouse.CrossFire.Server.Shared.CrossFireWindowsService.TraceMessage(String methodName, String message)
</ACVS_S>
<ACVS_M>
CrossFireReportServer.ReconnectToServer() connected at 12/23/2016 3:25:14 AM
</ACVS_M>
<ACVS_ST>
</ACVS_ST>
</ACVS_T>
答
我不会建议使用正则表达式,除非它是一个很大文件。 您需要像这样的正则表达式搜索字符串(?<=<ACVS_T>)((.|\n)*)(?=<\/ACVS_T>)
请针对您需要的每个部分进行调整。
您可以添加根节点并将其解释为XML文件。 如下例:
$File = "PathToFile"
$XML = [XML]("<Root>" + (Get-Content -Path $File) + "</Root>")
$XML.Root.ACVS_T | ForEach-Object {
$Obj = '' | Select-Object -Property ACVS_D, ACVS_TI, ACVS_C, ACVS_S, ACVS_M, ACVS_ST
$Obj.ACVS_D = $_.ACVS_D
$Obj.ACVS_ST = $_.ACVS_ST
$Obj.ACVS_C = $_.ACVS_C
$Obj.ACVS_S = $_.ACVS_S
$Obj.ACVS_M = $_.ACVS_M
$Obj.ACVS_ST = $_.ACVS_ST
$Obj
}
+0
非常感谢! – user3839452
+0
你能接受这个答案吗? –
不要用正则表达式。 – ndn
'Select-Xml -Path Log.xml -XPath'RootNodeHere/ACVS_T'| ForEach {$ _。Node ...}' – TessellatingHeckler