将包含多个子文件的日志文件拆分到子文件中

时间:2017-05-23 17:38:11

标签: powershell

在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> 

2 个答案:

答案 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)