C# LINQ XML将元素读取到变量
我试图将这个xml文件读入C#中,读入一个变量或一组变量C# LINQ XML将元素读取到变量,c#,xml,linq,C#,Xml,Linq,我试图将这个xml文件读入C#中,读入一个变量或一组变量 <ROWSET> <ROW num="1"> <USER_ID></USER_ID> <FIRST_NAME>Timothy</FIRST_NAME> <MIDDLE_NAME></MIDDLE_NAME> <LAST_NAME>Scott</LAST_NAME> &
<ROWSET>
<ROW num="1">
<USER_ID></USER_ID>
<FIRST_NAME>Timothy</FIRST_NAME>
<MIDDLE_NAME></MIDDLE_NAME>
<LAST_NAME>Scott</LAST_NAME>
<EMPLOYEE_NO>99</EMPLOYEE_NO>
<HOME_PHONE></HOME_PHONE>
<EMPLOYEE_STATUS_>T</EMPLOYEE_STATUS_>
<HIRE_DATE>01/01/01</HIRE_DATE>
<DEPARTMENT>Engineering</DEPARTMENT>
<POSITION>Controls Engineer</POSITION>
<SHIFT>N</SHIFT>
<REPORTS_TO>Everhart,Robert</REPORTS_TO>
<PAY_TYPE>H</PAY_TYPE>
<EMPLOYEE_TYPE>R</EMPLOYEE_TYPE>
<TERMINATION_DATE>value</TERMINATION_DATE>
<PCN_CODE>stuff-RV</PCN_CODE>
</ROW>
<ROW num="2">
<USER_ID>RV100707</USER_ID>
<FIRST_NAME>Jan</FIRST_NAME>
<MIDDLE_NAME>G</MIDDLE_NAME>
<LAST_NAME>Pot</LAST_NAME>
<EMPLOYEE_NO>80</EMPLOYEE_NO>
<HOME_PHONE></HOME_PHONE>
<EMPLOYEE_STATUS_>A</EMPLOYEE_STATUS_>
<HIRE_DATE>01/01/01</HIRE_DATE>
<DEPARTMENT>Shipping</DEPARTMENT>
<POSITION>Shipping Coordinator</POSITION>
<SHIFT>2</SHIFT>
<REPORTS_TO>Hajkova,Karin</REPORTS_TO>
<PAY_TYPE>H</PAY_TYPE>
<EMPLOYEE_TYPE>R</EMPLOYEE_TYPE>
<TERMINATION_DATE></TERMINATION_DATE>
<PCN_CODE>stuff-RV</PCN_CODE>
提摩太
斯科特
99
T
01/01/01
工程
控制工程师
N
艾弗哈特,罗伯特
H
R
价值
填充房车
RV100707
简
G
锅
80
A.
01/01/01
航运
船务协调员
2.
哈伊科娃,卡林
H
R
填充房车
我看了一些例子,但没有一个保留了元素。我还想循环到文件的末尾,在那里每次只运行一行。因此,另一个函数可以获取这些值并将它们发送到需要的位置
例如:
行元素:
循环直到xml文档结束
<USER_ID></USER_ID>
<FIRST_NAME>Timothy</FIRST_NAME>
<MIDDLE_NAME></MIDDLE_NAME>
<LAST_NAME>McCreary</LAST_NAME>
<EMPLOYEE_NO>1048</EMPLOYEE_NO>
<HOME_PHONE></HOME_PHONE>
<EMPLOYEE_STATUS_>T</EMPLOYEE_STATUS_>
<HIRE_DATE>05/17/2010</HIRE_DATE>
<DEPARTMENT>Engineering</DEPARTMENT>
<POSITION>Controls Engineer</POSITION>
<SHIFT>N</SHIFT>
<REPORTS_TO>Everhart,Robert</REPORTS_TO>
<PAY_TYPE>H</PAY_TYPE>
<EMPLOYEE_TYPE>R</EMPLOYEE_TYPE>
<TERMINATION_DATE>07/01/2010</TERMINATION_DATE>
<PCN_CODE></PCN_CODE>
提摩太
麦克里
1048
T
05/17/2010
工程
控制工程师
N
艾弗哈特,罗伯特
H
R
07/01/2010
上传到HTTP//我已经解决了这部分问题
ROW=row2元素基本上,您可以使用XDocument(
使用System.Xml.Linq;
)来解析文档。用法如下:
XDocument doc = XDocument.Parse(File.ReadAllText("yourfilename.xml"));
XElement rowset = doc.Element("ROWSET"); // get the ROWSET element
XElement row1 = rowset.Elements("ROW").First(); // get the first child ROW of ROWSET
//get the ROW child of ROWSET having attribute num == 2
XElement row2 = rowset.Elements().Single(row => row.Attribute("num").Value == "2");
当你说你只希望每次运行一行时,我假设你希望每次迭代只关注一行(对吗?)。可以对行集的子行元素使用foreach
foreach (XElement row in rowset.Elements())
{
string firstname = row.Element("FIRST_NAME").Value;
// etc
}
有许多使用.NET和C#处理XML的方法 据我所知:
- LINQ到XML(类似)
- XML序列化(请参阅:)
- 我在这里展示的方式(XPath):
XmlDocument doc=新的XmlDocument();
doc.LoadXml(File.ReadAllText(@“pathtoyurfile\File.xml”);
XmlNode rowset=doc.SelectSingleNode(“/rowset”);//r、 属性[“num”]。InnerText==“2”);
仅供参考@MC,您的答案是XPath解决方案:P作为SelectNode,SelectSingleNode的参数需要XPath字符串。@Tyres Ok,我把它们弄混了。那么您的方法(使用XElement
)调用了什么?XElement在LINQ to XML下,所以它可能是“LINQ”方法。
XmlDocument doc = new XmlDocument();
doc.LoadXml(File.ReadAllText(@"PathToYourFile\file.xml"));
XmlNode rowset = doc.SelectSingleNode("/ROWSET"); // <-- This variable provides access to the root XML node
// The .Cast<> is needed because LINQ works only generic Collections.
// The .ToList() executes the LINQ query and store the result in a List<> (usually faster than using the IEnumerable<> directly but also higher memory usage)
List<XmlNode> rows = rowset.SelectNodes("ROW").Cast<XmlNode>().ToList();
foreach (XmlNode row in rows)
{
// access attibutes of row with:
string numValue = row.Attributes["num"].InnerText;
// access sub-elements of row with:
string employeeNo = row.SelectSingleNode("EMPLOYEE_NO").InnerText;
// You can even go deeper through an XML hierarchy with:
// row.SelectSingleNode("SomeXMLNode/SubNode/NodeOfSubNode").InnerText;
}
// Select the 2nd row
XmlNode secondRow = rows.Single(r => r.Attributes["num"].InnerText == "2");