我正在尝试根据查询xml文件搜索或获取一个文件的xml元素。此查询xml文件定义将搜索哪些元素并检索其值。下面的代码找不到xml文件中的所有元素,即使元素在那里:
任何人都可以告诉我如何改进我的代码,或找出问题所在?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace ReadXMLRecursively
{
class Program
{
static void Main(string[] args)
{
doc.Load(@"C:\Requests.xml");
doc2.Load(@"C:XmlLists.xml");
XmlNodeList nList2 = doc2.SelectNodes("//Root/Element");
XmlNodeList nList = doc.SelectNodes("//Root/List");
foreach (XmlNode xmlNode in nList)
{
if (nList2 != null)
foreach (XmlNode n in nList2)
{
if (n.Attributes != null)
{
string val = n.Attributes.GetNamedItem("SourceCol").Value;
if (xmlNode[val] != null)
{
//if (n.Attributes != null) Console.WriteLine(n.Attributes.GetNamedItem("SourceCol").Value);
XmlElement xmlElement = xmlNode[val];
if (xmlElement != null) Console.WriteLine(xmlElement.Name);
}
else
{
Console.WriteLine(val + " not found");
}
}
}
Console.WriteLine("------------- end------------------");
}
}
}
XML文件1
<root>
<list>
<FirstName>Abc</FirstName>
<LastName>LT</LastName>
<Occupatoin>Eng</Occupation>
<BirthDate></BirthDate>
...
</list>
</root>
XML文件2
<root>
<Trainings>
<Java>Ab</Java>
<NET>b</NET>
<SQL>c</SQL>
<Powershell>d</Powershell>
...
</Trainings>
根据此xml文件搜索上述xml文件
<root>
<Element Name="Firstname />
<Element Name="Lastname" />
<Element Name="Occupation" />
<Element Name="Java" />
<Element Name="Net" />
...
</root>
答案 0 :(得分:1)
您写道:
XmlNodeList nList = doc.SelectNodes(“// Root / List”);
在您的示例中,只有一个名为“list”的元素,因此您将进入nList
只有一个节点,其中一个长字符串包含所有子节点,所以你不能通过循环获得它们。
如果您想让“list”的子节点在不同节点中的任何元素,您需要将其更改为:
XmlNodeList nList = doc.SelectNodes("//Root/List/*");