[英]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 都沒有成功。
添加 nameSpace 似乎沒有幫助
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 到 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);
}
正如@Yitzhak Khabinsky 已經展示的那樣,我也認為使用 Linq 到 XML 非常簡單。 你的不工作,因為你沒有正確使用 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>";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.