我们最近运行的VeraCode指出了以下方法:
public XmlElement RunProcedureXmlElement(string Procedure, List<SqlParameter> Parameters)
{
DataSet ds = RunProcedureDataSet(Procedure, Parameters);
XmlDocument xmlDoc = new XmlDocument();
StringBuilder strXML = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
foreach (DataRow dr in dt.Rows)
{
strXML.Append(dr[0]); // Do I still need .ToString()???
}
}
if (strXML.Length == 0) strXML.Append("<root total=\"0\"></root>");
try
{
xmlDoc.LoadXml(strXML.ToString());
}
catch (XmlException e)
{
}
return xmlDoc.DocumentElement;
}
修复该方法的优秀解决方案是什么,以便VeraCode停止抱怨?
感谢的
答案 0 :(得分:3)
在做了一些研究之后,这段代码应该解决它:
using (System.IO.MemoryStream stream = new System.IO.MemoryStream (Encoding.Default.GetBytes(strXML.ToString())))
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
using (XmlReader reader = XmlReader.Create(stream, settings))
{
try
{
xmlDoc.Load(reader);
}
catch(XmlException e)
{
}
}
}
答案 1 :(得分:2)
我对Veracode也有同样的问题,以下解决了这个问题
声明XmlReader
后:
XmlDocument xmlDoc = new XmlDocument();
添加行:
xmlDoc.XmlResolver = null;
答案 2 :(得分:2)
根据VS2017 IDE建议,您可以通过以下方法进行纠正:
XmlDocument xmlDoc = new XmlDocument { XmlResolver = null };
答案 3 :(得分:1)
我使用以下示例来解决此问题
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(strXML.ToString());