2

我有一个 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 信息,虽然有很多关于在 C#、C++、VB 中设置允许/禁止值的文档,但对于 Powershell 来说却很少。具有潜在有用信息的一页加载错误,并且不会显示 powershell 示例代码;我怀疑这是尚未推出最新最好的 IE 的功能。

所以在一个完美的世界里,我想在我的脚本中包含一个允许 DTD 或忽略禁令的行。我不知道该怎么做,或者即使通过 powershell 有什么东西。

万一这很重要,SUCCESSFUL 文件转换具有以下标头:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">

错误的文件使用这个:

<?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">
4

3 回答 3

3

做了一些挖掘。我在这里看到的一个潜力是编写一个忽略 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

}

于 2013-04-03T18:17:58.027 回答
1

虽然我无法使用@GaussianBlur 的建议忽略 DTD,但该解决方案确实发现了元数据中的一些奇怪之处。

我注意到任何有<?xml version="1.0" encoding="utf-8" ?>错误的东西,而在 HTML 中没有该行的文件转换时没有发生任何事件。

我所有的 HTML 文件中的一个简单的全局替换/删除快速解决了这个问题。

于 2013-04-04T16:03:35.070 回答
0

对于我所需要的,我只使用 Gaussian Blur 的回答中的一行来完成这项工作

我已经有了这个: $xml = New-Object -TypeName XML

我刚刚添加了这个: $xml.XmlResolver = $null

这成功地忽略了 DTD

于 2014-04-23T09:51:31.803 回答