【发布时间】:2026-01-23 02:10:01
【问题描述】:
我有两种方法:
- 第一个将 xml 字符串解析为一些 XElement(其中 xml 是“香蕉”元素的序列)
- 第二个从子 'id' 元素中提取值并将其返回
我有两个“GetBananaId(XElement element)”的替代实现 - 谁能解释为什么第二个“错误”实现没有给出相对于其 XElement 参数的子元素?
public void TestHarness()
{
var xml = "<bananas><banana><id>A</id></banana><banana><id>B</id></banana><banana><id>C</id></banana></bananas>";
foreach (var element in GetBananaElements(xml))
{
var right = GetBananaId(element);
var wrong = GetBananaId_WRONG(element);
Console.WriteLine("Right: {0}, Wrong: {1}", right, wrong);
}
}
public IEnumerable<XElement> GetBananaElements(string recordsXml)
{
var recordsXDoc = XDocument.Parse(recordsXml);
return recordsXDoc.XPathSelectElements("//banana");
}
public string GetBananaId(XElement element)
{
return element.Element("id").Value;
}
public string GetBananaId_WRONG(XElement element)
{
return element.XPathSelectElement("//id").Value;
}
这些产生控制台输出:
Right: A, Wrong: A
Right: B, Wrong: A
Right: C, Wrong: A
【问题讨论】:
标签: .net linq-to-xml xelement