0

我正在使用 xmlreader.read() 读取 xml gps 数据。我想输出不在线元素内的所有坐标点。以下包含在文件中,我想排除列出的坐标。

<place>
  <desc>home</desc>
  <line>
      <coordinate>123,123,123</coordinate>
      <coordinate>1223,1223,22123</coordinate>
  </line>
</place>

这是一个有效坐标的示例,我想输出和处理(都位于同一个文件中):

<place>
   <desc>home</desc>
   <point>
      <coordinate>123,123,123</coordinate>
   </point>
</place>

不同的是,一个是线对象的一部分,另一个是点。我目前有这个代码,它抓住了一切。

            while (lxmlReader.Read())
            {

                    if (lxmlReader.NodeType == XmlNodeType.Element)
                    {
                        if (lxmlReader.Name == "coordinate")
                        {
                            rtxtOutput.Text += "\r\nElement Name: " + lxmlReader.Name.ToString();
                            rtxtOutput.Text += " Value: " + lxmlReader.ReadInnerXml().ToString();
                        }
                    }                   
            }
4

2 回答 2

5

我不确定如何使用 XmlReader(或者是否可能)来执行此操作 - 您是否考虑将 XML 加载到 XmlDocument 或 XDocument 对象中,这将允许您对其执行适当的查询。

然后你可以做这样的事情:

XmlDocument doc = new XmlDocument();
doc.Load("path.xml");
foreach (XmlElement  pointCoord in doc.SelectNodes("/place/point/coordinate"))
{
    /Do something
}

你会发现很多使用 XPath 在线选择基于父节点等的示例。

于 2012-05-01T18:02:58.087 回答
1

如果你有可用的 LINQ,我会做这样的事情:

IEnumerable<string> coords = XElement.Load("gps.xml")
    .Descendants("point")
    .Descendants("coordinate")
    .Select(c => c.Value);
于 2012-05-01T18:10:15.840 回答