Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XmlDocument、XmlResolver和www.w3.org_.net_Xml Serialization - Fatal编程技术网

.net XmlDocument、XmlResolver和www.w3.org

.net XmlDocument、XmlResolver和www.w3.org,.net,xml-serialization,.net,Xml Serialization,我的一个用户在打开文件时出现一个错误(我使用的是标准xml 1.0): 我在这里找到了一篇文章,其中讨论了这一点,并建议将XmlResolver属性设置为null。我已经试过了,我所有的文档似乎仍然可以正常加载。但是,我最不希望的是破坏我的应用程序的文件读取机制,因此禁用解析器是否确实安全?这取决于是否使用外部引用。您始终可以编写自己的xmlsolver,允许它处理您现有的文件(例如,我有一个可以从resx读取已知文件) 但最简单的选择就是禁用它。。。当然,您的单元测试将很快发现任何问题-p这实

我的一个用户在打开文件时出现一个错误(我使用的是标准xml 1.0):


我在这里找到了一篇文章,其中讨论了这一点,并建议将XmlResolver属性设置为null。我已经试过了,我所有的文档似乎仍然可以正常加载。但是,我最不希望的是破坏我的应用程序的文件读取机制,因此禁用解析器是否确实安全?

这取决于是否使用外部引用。您始终可以编写自己的
xmlsolver
,允许它处理您现有的文件(例如,我有一个可以从resx读取已知文件)


但最简单的选择就是禁用它。。。当然,您的单元测试将很快发现任何问题-p

这实际上取决于您是否使用外部引用。您始终可以编写自己的
xmlsolver
,允许它处理您现有的文件(例如,我有一个可以从resx读取已知文件)


但最简单的选择就是禁用它。。。当然,您的单元测试将很快发现任何问题-p

如果正在解析的XML使用在引用的DTD中定义的实体,则禁用外部引用将出现问题:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sample SYSTEM "./sample.dtd">
<root>&text;</root>
在这种情况下,XML解析正确,但
&text
为空,而不是
text.txt
文件的内容

这两种情况都很少见,尤其是第二种,所以你应该没事

验证通常不是问题:默认情况下,
XmlReader
不进行任何验证,因此即使它无法加载相关的DTD/XSD,也没有任何区别


所有这些在使用.NET 4.0时都是正确的,我没有使用框架的其他版本进行测试。

如果正在解析的XML使用在引用的DTD中定义的实体,则禁用外部引用时会遇到问题:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sample SYSTEM "./sample.dtd">
<root>&text;</root>
在这种情况下,XML解析正确,但
&text
为空,而不是
text.txt
文件的内容

这两种情况都很少见,尤其是第二种,所以你应该没事

验证通常不是问题:默认情况下,
XmlReader
不进行任何验证,因此即使它无法加载相关的DTD/XSD,也没有任何区别


所有这些都适用于使用.NET 4.0,我没有使用框架的其他版本进行测试。

避免连接到W3C站点的另一种方法是使用。
xmlPreloadeResolver
包含许多嵌入的“众所周知的”DTD和(AFAIR)模式,每当xml包含对其中一个模式的引用时,解析器将为其提供服务,而无需尝试连接任何地方

避免连接到W3C站点的另一种方法是使用。
xmlPreloadeResolver
包含许多嵌入的“众所周知的”DTD和(AFAIR)模式,每当xml包含对其中一个模式的引用时,解析器将为其提供服务,而无需尝试连接任何地方

谢谢你,马克。我想我没有使用任何外部参照。不幸的是,我不是xml专家,所以在发布新版本之前,我不相信自己能正确地测试这个更改。外部引用是什么样子的?如果没有ext引用,为什么XmlDocument会连接到w3?大概主要是xsd验证?@MarcGravel:可能的问题是实体解析-请参阅我添加的答案。谢谢Marc。我想我没有使用任何外部参照。不幸的是,我不是xml专家,所以在发布新版本之前,我不相信自己能正确地测试这个更改。外部引用是什么样子的?如果没有ext-refs,为什么XmlDocument会连接到w3?大概主要是xsd验证?@marcgravel:可能的问题是实体解析——请参阅我添加的答案。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE dtd_sample[
  <!ENTITY text SYSTEM ".\text.txt">
]>
<root>&text;</root>