【发布时间】:2019-04-06 20:31:51
【问题描述】:
如何使用 Visual Studio 2017 使用引用的公共 XSD 架构验证我的 XML?
在 Visual Studio 2017 中,首先我在 tools->Options->Text Editor->XML->Miscellaneous 下启用“自动下载 DTD 和模式”。然后,当我指定一个包含 xsi:schemaLocation 的 XML 文档时,Visual Studio 无法加载引用的架构,并且我无法利用 Visual Studio 的 XML 验证和智能感知编辑等功能。
这里是一个例子,取自VXML 2.1的符合标准的示例文档
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml
http://www.w3.org/TR/2007/REC-voicexml21-20070619/vxml.xsd">
<form>
<block>hello</block>
</form>
</vxml>
如果我在 Visual Studio 中将此作为 XML 文档输入,则会收到一堆警告:
The operation has timed out
The schema referenced from this location in your document contains errors
我认为@Petru Gardea 的这个答案与我的问题相似 - https://stackoverflow.com/a/21562249/90236 - W3C 显然会限制他们的服务器,并且 Visual Studio 等工具会超时。上面答案中的建议是将XSD文件带到本地并更新xsd路径。不幸的是,一个复杂的模式可能会通过 xsd:include 或 xsd:import 引入其他模式。我无法正确下载所有包含的架构以使其正常工作。
Visual Studio 不应该将引用的架构下载并缓存为 XML 架构集的一部分吗?我是否必须按照XML Validation with XSD in Visual Studio IDE 中的说明手动下载一些架构并将其添加到集合中?
其他工具,尤其是 XMLSpy,只要做正确的事,验证效果就很好。我可以让它在 Visual Studio 中工作吗?
-- 更新--
我发现这篇文章W3C’s Excessive DTD Traffic。但我不清楚接受的解决方案是什么。 Visual Studio 不应该为架构管理 XML 目录吗?我还被告知 w3.org 在没有有效用户代理标头的情况下不会响应 XSD 请求。这就是我的操作超时的原因吗?
【问题讨论】:
-
您找到解决方案了吗?
-
没有。不幸的是,我从来没有找到一个好的解决方案。我也没有用 Visual Studio 2019 重新测试过。也许它有更好的行为。我最终使用了 XMLspy 的评估副本。这在验证模式方面做得很好。那个 30 天的试用期(或任何试用期)是我为该项目所需要的全部。
-
VS2019 也好不到哪里去。不愿意花超过 500 美元购买一个带有基本 XML 模式验证的文本编辑器,我发现一个 Notepad++ 插件可以很好地完成这项工作。
-
我已经测试过 Notepad++ 插件,但它们没有帮助。我刚刚升级到 XML Tools 3.0.4.2,它似乎做得很好。谢谢。
标签: xml visual-studio validation xsd vxml