【问题标题】:Parse xml from database从数据库中解析 xml
【发布时间】:2013-03-11 21:59:12
【问题描述】:

目前我将 xml 存储在 ms sql dbase 中,不是文件。这是一个小样本。

<NewDataSet>
<Table1>
<billTo_lastName>asdf</billTo_lastName>
<orderAmount>160.00</orderAmount>
<billTo_street1>asdf</billTo_street1>
<card_accountNumber>############1111</card_accountNumber>
</Table1>
</NewDataSet>

目前我在 Datable 中返回结果。

解析上述内容并将其显示在页面上的最佳方法是什么。 页面显示仅供参考。不会对xml进行额外的处理。

我希望页面显示这些内容。

billTo_lastName: asdf
orderAmount: 160.00
etc.

【问题讨论】:

  • XML 是否存储在数据库中的 XML 数据类型字段中?
  • 你的问题不是 100% 清楚的。你需要这些解析的数据做什么?你打算对解析的数据做额外的处理吗?您希望它如何显示?
  • 该字段是 varchar max.
  • 不是存储 XML 数据的最佳方式。如果您拥有 XML 类型的数据,则可以使用 SQL 函数就地查询 XML。您不能使用其中一种内置数据源吗?这可能会对您有所帮助:4guysfromrolla.com/articles/092706-1.aspx
  • 我想过。但数据只是信息性的。我现在真的不需要查询它。

标签: c# asp.net xml


【解决方案1】:

取决于您要如何处理它。一种方法是创建一个XmlDocument,然后调用LoadXml

// get the data from the data table, into a string.

// then create an XML document and load the string
var doc = new XmlDocument();
doc.LoadXml(dataString);

如果你想使用 Linq-to-Xml,你需要创建一个XElement

var element = XElement.Load(dataString);

【讨论】:

    【解决方案2】:

    感谢 Jim 为我指明了正确的方向。 XmlDocuments LoadXml 工作得很好。 然后我能够将其放入 XmlNodeList 并选择顶部节点。 做了 XmlNode 并循环遍历子节点。

        DataTable dt = sqlselect(sqlQuery, parameter);
        var doc = new XmlDocument();
        doc.LoadXml(dt.Rows[0]["ua_post"].ToString());
    
        XmlNodeList nl = doc.SelectNodes("NewDataSet");
        XmlNode root = nl[0];
    
        foreach (XmlNode xnode in root.ChildNodes[0])
        {
            string name = xnode.Name;
            string value = xnode.InnerText;
            string nv = "<b>" + name + ":</b> " + value;
            Label1.Text += nv + " <br />" + Environment.NewLine;
        }
    

    我在页面上得到了一个简单的显示。

        billTo_lastName: asdf 
        orderAmount: 160.00 
        billTo_street1: asdf 
        card_accountNumber: ############1111 
    

    【讨论】:

      【解决方案3】:

      您可以将它们作为列从数据库返回到 DataTable 中,然后使用带有 ItemTemplates 的任何数据控件显示它们例如:

      declare @xml as xml
      set @xml = '<NewDataSet>
      <Table1>
      <billTo_lastName>asdf</billTo_lastName>
      <orderAmount>160.00</orderAmount>
      <billTo_street1>asdf</billTo_street1>
      <card_accountNumber>############1111</card_accountNumber>
      </Table1>
      </NewDataSet>'
      
      ;with cte as (    
        select @xml xmlstring
      )
      SELECT 
      xmlstring.value('(/NewDataSet//Table1/billTo_lastName/node())[1]','VARCHAR(100)')
       as billTo_lastName,
      xmlstring.value('(/NewDataSet//Table1/orderAmount/node())[1]','VARCHAR(20)') 
      as orderAmount
      FROM cte
      

      SQL DEMO

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 2013-03-27
        相关资源
        最近更新 更多