1

XHTMLをビット単位で含むXMLドキュメントがいくつかあります。HTMLはMSWordか何かから出てきたものであり、コンテンツを除いてまったく同じである隣接するSPANタグがたくさんあります。

XMLをPowerShellにロードし、隣接するノードなどを比較してきましたが、これは面倒で、エラーが発生する可能性が高くなります。XMLDOMまたはHTMLDOMを介してこれを行うための賢い方法はありますか?

4

1 に答える 1

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)
}
于 2012-06-19T10:45:33.830 に答える