我有一个PowerShell脚本,可以将HTML文档转换为Word,RTF,Text和Word 2010(.docx)。许多文档都出错了以下内容:
Exception calling "Open" with "1" argument(s): "Word encountered an error processing the XML file Viewing_Customer_Payments.htm
DTD is prohibited.
Location: Line: 2, Column: 9"
At C:\blah\blah\blah\blah\blah.PS1:95 char:36
+ $opendoc = $word.documents.open <<<< ($docs.FullName)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
我一直在寻找DTD Powershell信息,虽然有plenty of documentation在C#,C ++,VB中将值设置为允许/禁止,但对于Powershell来说却很少。 one page with potentially useful information加载有错误,不会显示powershell示例代码;我怀疑这是没有推出最新最好的IE的功能。
所以在一个完美的世界里,我想要包含一行允许DTD或忽略我脚本中的禁令。我不知道怎么做,或者即使有一些东西通过powershell。
如果重要,SUCCESSFUL文件转换有这个标题:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
ERRORING出来的文件使用这个:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
答案 0 :(得分:3)
Function Get-XML ($filePath) {
$fileContent = New-Object System.Xml.XmlDocument
$fileContent.XmlResolver = $null
Try {
$fileContent.Load($filePath)
}
Catch [system.exception] {
write-host "Could not open file $filePath"
}
$fileContent
}
答案 1 :(得分:1)
虽然我无法使用@ GaussianBlur的建议忽略DTD,但该解决方案确实揭示了元数据中的一些奇怪现象。
我注意到<?xml version="1.0" encoding="utf-8" ?>
出错了,而HTML中没有该行的文件没有发生意外。
在我的所有HTML文件中进行简单的全局替换/删除可以快速解决问题。
答案 2 :(得分:0)
对于我需要的东西,我只使用了高斯模糊的一行答案
我已经有了这个: $ xml = New-Object -TypeName XML
我刚添加了这个: $ xml.XmlResolver = $ null
这成功忽略了DTD