html로 :: 디코드 또는 등록 번호를 사용하는 것보다 다른이를 할 수있는 일반적인 방법이 있습니다 특급. 그것은 훨씬 더 복잡하지만 링크 열 이외의 일부 열에는 링크처럼 처리해서는 안되는 특수 HTML 문자가 들어있는 경우 유용 할 수 있습니다 (예 : $ PageTitle에 "foo < bar"와 같은 내용이있는 경우, Html :: Decode 사용 후).
이 접근법은 ConvertTo-Html이 Powershell/.Net XML 기능에서 사용할 수있는 유효한 XHTML을 생성한다는 사실을 사용합니다. 주요 개념은 cmdlet 출력을 XML 문서로 변환 한 다음 XPath로 링크 열을 검색하고 DOM 함수를 사용하여 링크를 만들도록 수정하는 것입니다. 숫자가 - 'TD [N] // X 표/X : TR/X', N은
가
$pso = New-Object PSObject -Property @{
SiteUrl = 'foobar.org'
PageTitle = 'x&z a<b<c'
PageUrl = 'foobar.org/contact.html'
} | ConvertTo-Html
$xmlDoc = [xml]$pso
$xhtmlNS = 'http://www.w3.org/1999/xhtml'
$xmlNSManager = New-Object System.Xml.XmlNamespaceManager $xmlDoc.NameTable
$xmlNSManager.AddNamespace('x', $xhtmlNS)
$xmlDoc.SelectNodes('//x:table/x:tr/x:td[3]', $xmlNSManager) | %{
$a = $xmlDoc.CreateElement('a', $xhtmlNS)
$a.setAttribute('href', $_.'#text')
[void]$a.AppendChild($xmlDoc.CreateTextNode('Contact Us'))
[void]$_.ReplaceChild($a, $_.FirstChild)
}
$xmlDoc.OuterXml | Out-File 'test.html'
XPath를 제 n 열의 셀을 검색하는 문자열이다 : 여기
는 코드이며 열 (인덱스는 1부터 시작 함).
Xml Namespace breaking my xpath!
다음과 같은 XPath를 한 번에 수정하려면 다음을 사용할 수 있습니다. '// x : table/x : tr (예 : XmlNamespaceManager 및 펑키'x : '접두어)/x : td [position() = 1 또는 position() = 2 or ... 또는 position() = last()] '
foreach ($td in $xmlDoc.SelectNodes('//x:table/x:tr/x:td[position()=1 or position()=2 or ... or position()=last()]', $xmlNSManager)) {
# processing first column cells
[void]$foreach.MoveNext()
# processing second column cells
[void]$foreach.MoveNext()
# etc
}
이'Add-Type -AssemblyName System.Web 스크립트 시작시 [System.Web.HttpUtility] :: HtmlDecode ($ pso)'? – Nish
예 또는 처음 사용하기 바로 전에. –