【问题标题】:Error in formating of XML string with CDATA使用 CDATA 格式化 XML 字符串时出错
【发布时间】:2010-10-07 15:44:58
【问题描述】:

我收到此错误“第 1 行的开始标记与 'document' 的结束标记不匹配”。

    string rawXml = "<?xml version='1.0' ?>" +
        "<document>" +
            "<![CDATA[" +
                "<topic>" +
                   "My test" +
                "</topic>" +
            "]]>" +
        "</document>";

当我尝试执行将这个 xml 作为参数发送的存储过程时发生错误。

    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(rawXml);

    DataResultXElement drx = ss.xelem_Query(string.Format("exec Topic_Update '{0}', '{1}'", sessionId, xmlDoc.InnerXml));

如果我删除它可以工作,但我需要 CDATE 才能在数据库中正确存储数据。

我应该以不同的方式格式化字符串吗?谢谢!

【问题讨论】:

  • 你根本不应该使用字符串!
  • 感谢您的评论,但解决方案呢?我怎样才能发送这个 XML 数据?

标签: asp.net xml stored-procedures cdata


【解决方案1】:
  1. 不要使用字符串操作来构造 XML 文档。

  2. 不要使用字符串操作来构造 SQL 查询。

改为这样做:

StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
using (XmlWriter xw = XmlWriter.Create(sw))
{
    xw.WriteStartElement("document");
    xw.WriteCData("<topic>My test </topic>");
    xw.WriteEndElement();
}

XDocument result = new XDocument();
using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("Topic_Update", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("SessionID", sessionId);
    cmd.Parameters.AddWithValue("XmlText", sb.ToString());
    using (XmlReader xr = cmd.ExecuteXmlReader())
    {
        result.Load(xr);
    }
}

【讨论】:

  • 感谢您的解释!但是为什么我会收到这个错误? “第 1 行的开始标签与‘文档’的结束标签不匹配”。因为 XML 格式不正确?还是我不应该使用字符串来构造SQL?
  • 我认为这是因为您使用string.Format 来构建您的SQL。 XML 包含撇号,SQL 字符串使用撇号来分隔参数。这是使用参数化查询的众多原因之一。
【解决方案2】:

几件事:

  • 解析您的rawXml(即构造XmlDocument 实例)完全是多余的。
  • 您一定是在原始 XML 中打错字了。您提供的内容看起来像是完全有效的 XML(实际上通过了 W3C 的验证)。
  • 不要使用String.Format 构造SQL 查询。请改用 SQL 查询参数。原因是这样您最终会得到一条无效的 SQL 语句,同时也为 SQL 注入攻击打开了大门。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多