XmlReader
не знает о префиксах пространства имен, так как вы их используете.
Вот тестовая программа, которая делает то, что, я думаю, вам нужно.Обратите внимание, что URI пространства имен задан явно.
using System;
using System.IO;
using System.Xml;
class SOTest {
static void Main(string[] args) {
ParseXML(args[0]);
}
static void ParseXML(String path)
{
XmlReader reader = XmlReader.Create( new FileStream( path, FileMode.Open ) );
reader.Read();
while( reader.Read() )
{
// Only detect start elements.
if ( reader.IsStartElement() && reader.LocalName == "featureMember" && reader.NamespaceURI == "gml-namespace-uri" )
{
Console.WriteLine(reader.Name);
reader.ReadToDescendant("X", "ogr-namespace-uri");
Console.WriteLine(reader.ReadInnerXml());
}
}
}
}
Я добавил декларации в исходный документ для тестирования:
<?xml version="1.0" encoding="utf-8"?>
<wrapper xmlns:gml="gml-namespace-uri" xmlns:ogr="ogr-namespace-uri">
<gml:featureMember>
<ogr:fence_neighbors fid="F1">
<ogr:Name>Xyz Xyz</ogr:Name>
<ogr:X>2353.45361911000</ogr:X>
<ogr:Y>-4652.36641288000</ogr:Y>
</ogr:fence_neighbors>
</gml:featureMember>
</wrapper>
Выходные данные просто
gml:featureMember
2353.45361911000