在Windows系统上,我有一个日志文件,其中包含多个连接在一起的XML文件。
每个嵌入式XML文件都以:
<?xml version="1.0" standalone="yes"?>
我想将每个嵌入式XML文件写入自己独立的文件中。
我一直在玩PowerShell,但不能把它拉到一起
示例文件:
<?xml version="1.0" standalone="yes"?>
<INSTANCES>
<INSTANCE>
<HOST_NAME>sstest</HOST_NAME>
<INSTANCE_NAME>SSTEST1</INSTANCE_NAME>
<DATABASE_NAME>SSTEST</DATABASE_NAME>
<OPEN_MODE>READ WRITE</OPEN_MODE>
<DATABASE_ROLE>PRIMARY</DATABASE_ROLE>
<CREATED>2016-01-18</CREATED>
<DBID>192837465</DBID>
</INSTANCE>
</INSTANCES>
<?xml version="1.0" standalone="yes"?>
<PARAMS>
<PARAM>
<NAME>enable_logging</NAME>
<VALUE>FALSE</VALUE>
</PARAM>
<PARAM>
<NAME>db_valid</NAME>
<VALUE>YES</VALUE>
</PARAM>
<PARAM>
<NAME>enable_auditing</NAME>
<VALUE>FALSE</VALUE>
</PARAM>
<PARAM>
<NAME>managament_access</NAME>
<VALUE>TRUE</VALUE>
</PARAM>
</PARAMS>
答案 0 :(得分:2)
作为Hackerman答案的另一种方法,您可以使用正则表达式的正面预测,例如: (?=exampleregex)
。
(Get-Content C:\examplepath.xml -raw) -split '(?=<\?xml\ version="1\.0"\ standalone="yes"\?>)' |
Where-Object {$_ -ne ""} |
ForEach-Object {$i=0} {$_ | Out-File "C:\exampleoutput$i.xml"; i++}
答案 1 :(得分:1)
以下适用于我:
$myXml = @'
<?xml version="1.0" standalone="yes"?>
<INSTANCES>
<INSTANCE>
<HOST_NAME>sstest</HOST_NAME>
<INSTANCE_NAME>SSTEST1</INSTANCE_NAME>
<DATABASE_NAME>SSTEST</DATABASE_NAME>
<OPEN_MODE>READ WRITE</OPEN_MODE>
<DBID>192837465</DBID>
</INSTANCE>
</INSTANCES>
<?xml version="1.0" standalone="yes"?>
<PARAMS>
<PARAM>
<NAME>enable_logging</NAME>
<VALUE>FALSE</VALUE>
</PARAM>
<PARAM>
<NAME>db_valid</NAME>
<VALUE>YES</VALUE>
</PARAM>
<PARAM>
<NAME>enable_auditing</NAME>
<VALUE>FALSE</VALUE>
</PARAM>
</PARAMS>
'@
$separator = [string[]]@('<?xml version="1.0" standalone="yes"?>')
$myXml.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries)