2012-06-11 3 views
1

У нас есть несколько документов XML, которые содержат бит XHTML в битах. HTML вышел из MS Word или что-то еще, и есть много соседних тегов SPAN, которые точно совпадают, за исключением их содержимого.Как объединить соседние теги SPAN в документе XML?

Я загружал XML в powershell и сравнивал соседние узлы и так далее, но это кажется трудоемким и имеет большой потенциал для ошибок. Есть ли разумный способ сделать это через XML DOM или HTML DOM?

+0

Можете ли вы показать некоторые примеры XML и код PowerShell вы сейчас используете? –

+0

XML выглядит примерно так: Некоторые торговых представителей вашей компании использовать портативные компьютеры, которые запустить < span style = "font-family: Verdana; font-size: 10pt;"> Microsoft Office Outlook 2007 и Dan

ответ

0

Вот что я придумал:

function removeNode($mynode){ 
    $parent = $mynode.get_parentNode() 
    $parent.removeChild($mynode) 
} 

function parseStyles($mySpans){ 
    $global:finished = $true 
    foreach($span in $mySpans){ 
     if($span.('#text') -eq $null -and !$span.haschildnodes){ 
      removeNode $span 
     } 
     elseif($span.get_NextSibling() -ne $null){ 
      if($span.get_NextSibling().style -eq $span.style){ 
       $span.get_innerText()+$span.get_NextSibling().get_InnerText() 
       $span.'#text' = $span.get_innerText()+$span.get_NextSibling().get_InnerText() 
       $span.('#text') 
       removeNode $span.get_NextSibling() 
       $global:finished = $false 
      } 
     } 
    } 
    return $mySpans 
} 
$global:finished = $true 
$files = get-childitem -recurse -include "*.xml" 

foreach($file in $files){ 

    [xml]$inputXML = Get-Content($file.directory.name+'\'+$file.name) 
    do{ 
     $Spans = $inputXML.selectnodes('//span') 
     parseStyles($Spans) 
    }until($global:finished) 
    $inputXML.save('./desktop/prometric/'+$file.directory.name+'/processed_'+$file.name) 
} 
Смежные вопросы