如何使用Powershell设置(或忽略)DTD属性?

时间:2013-04-03 17:56:11

标签: error-handling powershell-v2.0 dtd

我有一个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">

3 个答案:

答案 0 :(得分:3)

有些人正在挖掘。我看到here的一个潜力是写一个忽略DTD的函数。这个想法对你也有用。

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