gpt4 book ai didi

c# - 从整个 XDocument 中提取属性

转载 作者:行者123 更新时间:2023-11-30 21:37:20 30 4
gpt4 key购买 nike

以下 XDocument 包含存储在属性 'x'、'y'、'x1'、'y1'、'z' 和 'z1' 下具有不同名称的 XElement 成员中的 (x,y) 坐标:

<?xml version="1.0" encoding="utf-8"?>
<shapes>
<shape>
<connections />
<foreground>
<strokewidth width="0.1" />
<path>
<move x="1395.6" y="84.6" />
<line x="80.1" y="84.6" />
<curve x1="75.1" y1="84.6" x2="71.1" y2="88.6" x3="71.1" y3="93.6" />
<line x="71.1" y="402.6" />
<close />
</path>
<fillstroke />
</foreground>
</shape>
</shapes>

从整个文档中仅提取属性“x”的值而不遍历所有元素并检查特定属性的最简单推荐方法是什么?给定的 XML 理想情况下会产生“x”坐标列表:

float[] x= {1395.6, 80.1, 71.1};
float[] x1 = {75.1};

'y', 'y1',...也是一样


编辑:由于坐标始终位于“叶”xml 元素中,因此我最终使用了:

return fileXml.Root.Descendants()
.Where(e => e.HasElements == false) // leaf element
.Where(e => e.Attribute("x") != null)
.Select(c => c.Attribute("x").Value).Select(float.Parse)
.ToList(); // or .ToArray();

它也可以包装在辅助函数中。

最佳答案

您可以使用 xpath。 XPath 表达式 //@x 将匹配名称为 x 的所有属性:

var doc = XDocument.Parse(yourXml);
float[] x = ((IEnumerable)doc.XPathEvaluate("//@x"))
.OfType<XAttribute>()
.Select(c => float.Parse(c.Value, CultureInfo.InvariantCulture))
.ToArray();

关于c# - 从整个 XDocument 中提取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370495/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com