2

我们最近运行的 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 停止抱怨?

谢谢

4

4 回答 4

5

我对 Veracode 也有同样的问题,以下解决了它。
声明后XmlReader

XmlDocument xmlDoc = new XmlDocument();

添加行:

xmlDoc.XmlResolver = null;
于 2015-12-17T18:37:27.183 回答
3

After doing some research, this piece of code should fix it:

        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)
                {

                }
            }
        }
于 2014-02-24T14:40:25.983 回答
2

根据 VS2017 IDE 建议,您可以通过以下方式更正它:

    XmlDocument xmlDoc = new XmlDocument { XmlResolver = null };
于 2020-09-10T08:53:05.497 回答
2

我用下面的例子来解决这个问题

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.XmlResolver = null;
  xmlDoc.LoadXml(strXML.ToString());
于 2018-06-08T08:41:44.950 回答