从xml中提取节点数据

我有一个像这样的xml:

 5 7 9  

我想创建一个包含所有id的字符串,如下所示:“5,7,9”。 我知道这可以用一个简单的循环,但由于这段代码将被称为100秒的时间,我想让它成为最快的方式。

我正在使用C#framework 4.0。

我目前的代码:

 XmlDocument doc = new XmlDocument(); XmlNodeList nodeList; StringBuilder strXml = new StringBuilder(); doc.LoadXml(sXmlQuery); nodeList = doc.SelectNodes("//PersonID"); if (nodeList != null) { foreach (XmlNode node in nodeList) { strXml.Append(node.InnerText.Trim()); strXml.Append(","); } } 

你可以使用LINQ to XML和string.Join :

 XDocument xmlDoc = XDocument.Parse(@" 5 7 9 "); var val = xmlDoc.Descendants("People") .SelectMany(r => r.Elements("PersonID")) .Select(r => r.Value); string str = string.Join(",", val); 

str将是str = "5,7,9"

我不知道它对你来说足够快,但我会试一试

 string s = String.Join("," , xDoc.Descendants("PersonID").Select(p => (string)p)); 

请尝试以下代码:

  public DataTable GetColumnsFromXML(String XMLPath, String TableName) { DataTable dtForColumns = DatatableforColumns(); XmlDataDocument xmldoc = new XmlDataDocument(); xmldoc.Load(XMLPath); XmlElement root = xmldoc.DocumentElement; XmlNodeList tablenodes = root.SelectNodes("Table"); if (tablenodes != null) foreach (XmlNode nodes in tablenodes) { if (!nodes.HasChildNodes) continue; if (nodes.Attributes == null) continue; //TableName = nodes.Attributes[0].Value; if (nodes.Attributes[0].Value == TableName) { String PrimaryKey = nodes.Attributes[1].Value; var nodesdisplayname = nodes.SelectNodes("Column/DisplayColumn"); var nodesorignalvalue = nodes.SelectNodes("Column/OrignalColumn"); if (nodesdisplayname != null && nodesorignalvalue != null) { for (int i = 0; i <= nodesdisplayname.Count - 1; i++) { var xmlDisplayNode = nodesdisplayname.Item(i); var xmlOrignalNode = nodesorignalvalue.Item(i); if (xmlDisplayNode != null && xmlOrignalNode != null) { DataRow dr; dr = dtForColumns.NewRow(); dr["DisplayColumn"] = xmlDisplayNode.InnerText; dr["OrignalColumn"] = xmlOrignalNode.InnerText; dr["PrimaryKey"] = PrimaryKey; dtForColumns.Rows.Add(dr); } } } } } return dtForColumns; } private DataTable DatatableforColumns() { DataTable dt = new DataTable(); dt.Columns.Add("DisplayColumn", typeof(String)); dt.Columns.Add("OrignalColumn", typeof(String)); dt.Columns.Add("PrimaryKey", typeof(String)); return dt; } 

要在这里访问这些是代码:

 DataTable dtColumns = new DataTable(); dtColumns = objXML.GetColumnsFromXML(Server.MapPath("~/XMLFile.xml"), TableName); 

根据您的要求定制,希望这对您有用。