从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);
根据您的要求定制,希望这对您有用。