C# Foreach XML 节点
我将二维坐标保存在 XML 文件上,其结构类似于:
<?xml version="1.0" encoding="utf-8" ?>
<grid>
<coordinate time="78">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
</grid>
我可以打开 XML 文件并通过 XmlTextReader 读取它,但是如何专门循环遍历坐标以检索时间属性和数据之间的数据?初始和最终节点的格式类似于:
string initial = "540:672";
string final = "540:672";
int time = 78;
新代码:
我的新代码:
//Read the XML file.
XDocument xmlDoc = XDocument.Load("C:\\test.xml");
foreach (var coordinate in xmlDoc.Descendants("coordinate"))
{
this.coordinates[this.counter][0] = coordinate.Attribute("time").Value;
this.coordinates[this.counter][1] = coordinate.Element("initial").Value;
this.coordinates[this.counter][2] = coordinate.Element("final").Value;
this.counter++;
};
但现在我收到此错误:
“你调用的对象是空的。”
XML
<?xml version="1.0" encoding="utf-8"?>
<grid>
<coordinate time="62">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
...
<coordinate time="46">
<initial>176:605</initial>
<final>181:617</final>
</coordinate>
</grid>
跳过了一些坐标标签以适应,但它们都有时间属性和初始/最终子标签。
全局变量
uint counter = 0;
// Coordinates to be retrieved from the XML file.
string[][] coordinates;
I'm saving 2-dimensional coordinates on an XML file with a structure similar to:
<?xml version="1.0" encoding="utf-8" ?>
<grid>
<coordinate time="78">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
</grid>
I can open the XML file and read it via the XmlTextReader, but how do I loop through the coordinates specifically to retrieve both the time attribute and data between the initial and final nodes in some format similar to:
string initial = "540:672";
string final = "540:672";
int time = 78;
New Code:
My New Code:
//Read the XML file.
XDocument xmlDoc = XDocument.Load("C:\\test.xml");
foreach (var coordinate in xmlDoc.Descendants("coordinate"))
{
this.coordinates[this.counter][0] = coordinate.Attribute("time").Value;
this.coordinates[this.counter][1] = coordinate.Element("initial").Value;
this.coordinates[this.counter][2] = coordinate.Element("final").Value;
this.counter++;
};
but now I get this error:
"Object reference not set to an instance of an object."
XML
<?xml version="1.0" encoding="utf-8"?>
<grid>
<coordinate time="62">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
...
<coordinate time="46">
<initial>176:605</initial>
<final>181:617</final>
</coordinate>
</grid>
Skipped a few coordinate tags to fit, but they all had the time attribute and initial/final subtags.
Globals
uint counter = 0;
// Coordinates to be retrieved from the XML file.
string[][] coordinates;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能想要检查类似 Linq-to-XML 的内容:
这应该比直接使用低级 XmlTextReader 容易得多...
请参阅 此处 或 此处(或许多其他地方)了解 Linq-to-XML 的介绍。
更新:
请尝试此代码 - 如果它有效,并且您获得结果列表中的所有坐标,那么 Linq-to-XML 代码就可以了:
定义一个新的帮助器类:
并在您的 main 中代码:
这个列表及其内容是什么样的?你得到了你想要的所有坐标吗?
You might want to check into something like Linq-to-XML:
That should be a lot easier than using straight low-level XmlTextReader....
See here or here (or a great many other places) for introductions to Linq-to-XML.
UPDATE:
please try this code - if it works, and you get all the coordinates in that resulting list, then the Linq-to-XML code is fine:
Define a new helper class:
and in your main code:
How does this list and its contents look like?? Do you get all the coordinates you're expecting??
您可以使用 XmlSerialization 将 XML 变成一个简单的坐标类列表,只需少量工作,例如
然后在您的代码中:
You could have used XmlSerialization to make the XML into a simple list of coordinate classes with a small amount of work, e.g.
Then in your code: