使用 C# 解析 XML - 在 GetElementsByTagName 工作时无法 select 节点
Parsing XML with C# - Not able to select Nodes while GetElementsByTagName working
我正在尝试使用以下示例在 XML 文件中使用 c# select 节点。
<dsEq xmlns="http://tempuri.org/dsEq.xsd">
<Dago>
<EID>XX</EID>
以下代码有效:
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNodeList nodeCollection = xmlDoc.GetElementsByTagName("EID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
虽然我尝试了很多东西,但 Selectnodes 方法没有成功,无法正常工作:
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNodeList nodeCollection = xmlDoc.SelectNodes("/dsEq/Dago/EID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
提前致谢!
尝试了很多不同的 xPath 都没有成功。
添加名称空间似乎没有帮助
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNamespaceManager nameManager = new XmlNamespaceManager(xmlDoc.NameTable);
nameManager.AddNamespace("myEID","/dsEq/Dago");
XmlNodeList nodeCollection = xmlDoc.SelectNodes("myEID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
==> 显示无节点
通过 LINQ 很容易 XML。
LINQ to XML 自 2007 年起在 .Net Framework 中可用。
c#
void Main()
{
XDocument xdoc = XDocument.Parse(@"<dsEq xmlns='http://tempuri.org/dsEq.xsd'>
<Dago>
<EID>XX</EID>
</Dago>
<Dago>
<EID>YY</EID>
</Dago>
</dsEq>");
XNamespace ns = xdoc.Root.GetDefaultNamespace();
List<String> listOfStrings = xdoc.Descendants(ns + "EID")
.Select(x => x.Value).ToList();
Console.Write(listOfStrings);
}
我也认为使用 Linq to XML 非常简单,正如@Yitzhak Khabinsky 已经展示的那样。你的没有工作,因为你没有正确使用 Xpath。
void Main()
{
var doc = new XmlDocument();
doc.LoadXml(sample);
var eids = getListOfEID(doc);
foreach (var eid in eids)
{
Console.WriteLine(eid);
}
}
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNamespaceManager nameManager = new XmlNamespaceManager(xmlDoc.NameTable);
nameManager.AddNamespace("x","http://tempuri.org/dsEq.xsd");
XmlNodeList nodeCollection = xmlDoc.SelectNodes("//x:EID", nameManager);
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
static readonly string sample = @"<dsEq xmlns=""http://tempuri.org/dsEq.xsd"">
<Dago>
<EID>XX</EID>
</Dago>
<Dago>
<EID>YY</EID>
</Dago>
<Dago>
<EID>ZZ</EID>
</Dago>
</dsEq>";
我正在尝试使用以下示例在 XML 文件中使用 c# select 节点。
<dsEq xmlns="http://tempuri.org/dsEq.xsd">
<Dago>
<EID>XX</EID>
以下代码有效:
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNodeList nodeCollection = xmlDoc.GetElementsByTagName("EID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
虽然我尝试了很多东西,但 Selectnodes 方法没有成功,无法正常工作:
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNodeList nodeCollection = xmlDoc.SelectNodes("/dsEq/Dago/EID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
提前致谢!
尝试了很多不同的 xPath 都没有成功。
添加名称空间似乎没有帮助
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNamespaceManager nameManager = new XmlNamespaceManager(xmlDoc.NameTable);
nameManager.AddNamespace("myEID","/dsEq/Dago");
XmlNodeList nodeCollection = xmlDoc.SelectNodes("myEID");
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
==> 显示无节点
通过 LINQ 很容易 XML。
LINQ to XML 自 2007 年起在 .Net Framework 中可用。
c#
void Main()
{
XDocument xdoc = XDocument.Parse(@"<dsEq xmlns='http://tempuri.org/dsEq.xsd'>
<Dago>
<EID>XX</EID>
</Dago>
<Dago>
<EID>YY</EID>
</Dago>
</dsEq>");
XNamespace ns = xdoc.Root.GetDefaultNamespace();
List<String> listOfStrings = xdoc.Descendants(ns + "EID")
.Select(x => x.Value).ToList();
Console.Write(listOfStrings);
}
我也认为使用 Linq to XML 非常简单,正如@Yitzhak Khabinsky 已经展示的那样。你的没有工作,因为你没有正确使用 Xpath。
void Main()
{
var doc = new XmlDocument();
doc.LoadXml(sample);
var eids = getListOfEID(doc);
foreach (var eid in eids)
{
Console.WriteLine(eid);
}
}
private static List<string> getListOfEID(XmlDocument xmlDoc)
{
List<string> ListingEID = new List<string>();
XmlNamespaceManager nameManager = new XmlNamespaceManager(xmlDoc.NameTable);
nameManager.AddNamespace("x","http://tempuri.org/dsEq.xsd");
XmlNodeList nodeCollection = xmlDoc.SelectNodes("//x:EID", nameManager);
foreach (XmlNode elt in nodeCollection)
{
ListingEID.Add(elt.InnerText.ToString());
}
return ListingEID;
}
static readonly string sample = @"<dsEq xmlns=""http://tempuri.org/dsEq.xsd"">
<Dago>
<EID>XX</EID>
</Dago>
<Dago>
<EID>YY</EID>
</Dago>
<Dago>
<EID>ZZ</EID>
</Dago>
</dsEq>";