XHTMLをビット単位で含むXMLドキュメントがいくつかあります。HTMLはMSWordか何かから出てきたものであり、コンテンツを除いてまったく同じである隣接するSPANタグがたくさんあります。
XMLをPowerShellにロードし、隣接するノードなどを比較してきましたが、これは面倒で、エラーが発生する可能性が高くなります。XMLDOMまたはHTMLDOMを介してこれを行うための賢い方法はありますか?
XHTMLをビット単位で含むXMLドキュメントがいくつかあります。HTMLはMSWordか何かから出てきたものであり、コンテンツを除いてまったく同じである隣接するSPANタグがたくさんあります。
XMLをPowerShellにロードし、隣接するノードなどを比較してきましたが、これは面倒で、エラーが発生する可能性が高くなります。XMLDOMまたはHTMLDOMを介してこれを行うための賢い方法はありますか?
これが私が思いついたものです:
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)
}