#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%;
}
#>