使用XElement按名称获取子元素:提取XML中的Point元素
使用XElement提取XML中的Point元素
当然可以!用XElement处理这类XML结构简直得心应手,我给你两种实用的实现方式,附上代码示例供参考:
准备工作
首先要确保你引用了System.Xml.Linq命名空间,这是使用XElement的前提:
using System.Xml.Linq;
方式1:逐层精准定位
如果你的XML结构固定、层级明确,可以逐层遍历节点找到Point元素,这种方式更精准,还能避免误匹配其他层级的同名元素:
// 你的目标XML字符串 string xmlContent = @"<Folder> <name></name> <Placemark> <name></name> <description></description> <styleUrl></styleUrl> <MultiGeometry> <Point> <coordinates></coordinates> </Point> <LineString> <coordinates></coordinates> <tesselate>1</tesselate> </LineString> </MultiGeometry> </Placemark> </Folder>"; // 将XML字符串解析为XElement对象 XElement rootElement = XElement.Parse(xmlContent); // 逐层查找Point元素,使用*null条件运算符*避免空引用异常 XElement targetPoint = rootElement.Element("Placemark")? .Element("MultiGeometry")? .Element("Point"); // 如果找到Point元素,可以进一步提取它的子元素(比如coordinates) if (targetPoint != null) { string coords = targetPoint.Element("coordinates")?.Value ?? string.Empty; // 这里可以添加你的业务逻辑,比如输出或存储coords }
方式2:全局查找所有Point元素
如果XML结构可能有变化,或者存在多个Point元素,直接用Descendants方法遍历所有子节点,一次性找出所有名为Point的元素会更高效:
// 同样先解析XML为XElement XElement rootElement = XElement.Parse(xmlContent); // 获取所有层级下的Point元素集合 IEnumerable<XElement> allPoints = rootElement.Descendants("Point"); // 遍历集合处理每个Point元素 foreach (var point in allPoints) { string coords = point.Element("coordinates")?.Value ?? string.Empty; // 处理每个Point的逻辑 }
两种方式各有优势:逐层定位适合结构固定的场景,全局查找更灵活。你可以根据自己的实际需求选择~
内容的提问来源于stack exchange,提问作者Yeasin Abedin
相关产品推荐
相关产品推荐

