Редактирование HTML с помощью класса документа Microsoft HTML в Powershell

#html #powershell #dom

#HTML #powershell #dom

Вопрос:

Я пытаюсь отредактировать HTML-файл в powershell, я хочу удалить заголовок тега и его содержимое и добавить стиль элемента CSS и его содержимое в HTML-файл. Я использую класс документа Microsoft HTML для доступа к файлу HTML. Я получаю сообщение об ошибке, что выражение присваивания недопустимо в этой строке «$($($HTML.getElementsByTagName(‘head’)).innerHTML) = $CssContent» в powershell

HTML-файл

 <html xmlns:string="xalan://java.lang.String" xmlns:lxslt="http://xml.apache.org/xslt">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summary</title>
<link rel="sheet" type="text/css" title="Style" href="sheet.css">
</head>
 

Содержимое CSS, подлежащее замене в HTML-файле

 body {
    font:normal 68% verdana,arial,helvetica;
    color:#000000;
}
table tr td, table tr th {
    font-size: 68%;
}
 

Сценарий powershell

 #get contents of file
$Content = Get-Content 'test.html' -raw
$CssContent = Get-Content 'test.css' -raw

# Create HTML file Object
$HTML = New-Object -Com "HTMLFile"
$HTML.IHTMLDocument2_write($Content)

#Assign InnerHTML to CssContent
$($($HTML.getElementsByTagName('head')).innerHTML) = $CssContent
#the error i get is "The assignment expression is not valid at this line"
 

Комментарии:

1. Почему вы просто не используете встроенные командлеты PowerShell для XML? — Get-Command -Name '*xml*' .

2. Назначение CSS innerHTML не имеет смысла. Вам нужно будет добавить style элемент в качестве дочернего элемента head элемента.

3. я планировал использовать powershell replace для добавления стиля в HTML-файл

Ответ №1:

Продолжая мой комментарий.

Вы также можете использовать RegEx для этого варианта использования, хотя это не одобряется по сравнению с использованием командлетов XML.

 ($HtmlContent = @"
<html xmlns:string="xalan://java.lang.String" xmlns:lxslt="http://xml.apache.org/xslt">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summary</title>
<link rel="sheet" type="text/css" title="Style" href="sheet.css">
</head>
"@ )
# Results
<#
<html xmlns:string="xalan://java.lang.String" xmlns:lxslt="http://xml.apache.org/xslt">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summary</title>
<link rel="sheet" type="text/css" title="Style" href="sheet.css">
</head>
#>

($CssContent = @'
body {
    font:normal 68% verdana,arial,helvetica;
    color:#000000;
}
table tr td, table tr th {
    font-size: 68%;
}
'@)
# Results
<#
body {
    font:normal 68% verdana,arial,helvetica;
    color:#000000;
}
table tr td, table tr th {
    font-size: 68%;
}
#>

# Using a multi-line RegEx tag HTML tag match
($NewHtmlContent = $HtmlContent -replace '(?ms)^<head.*?</head>', $CssContent)
# Results
<#
<html xmlns:string="xalan://java.lang.String" xmlns:lxslt="http://xml.apache.org/xslt">
body {
    font:normal 68% verdana,arial,helvetica;
    color:#000000;
}
table tr td, table tr th {
    font-size: 68%;
}

#>