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 に答える