【问题标题】:How to parse this xml using c# [closed]如何使用 C# 解析这个 xml [关闭]
【发布时间】:2014-01-17 06:41:25
【问题描述】:

我想使用 LINQ 在 c# 中解析这个 xml。我输入了地标名称“RFA13”。 我想获取这个输入值的坐标节点。

<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns='http://www.opengis.net/kml/2.2'>
    <Document>
            <name>EQDemo</name>
            <description><![CDATA[]]></description>
            <Folder>
                <name>Untitled layer</name>
                <Placemark>
                    <styleUrl>#line-000000-4</styleUrl>
                    <name>RFA13</name>
                    <Polygon>
                        <outerBoundaryIs>
                            <LinearRing>
                                <tessellate>0</tessellate>
                                <coordinates>-97.77405023574829,30.27369885454351,0.0 -97.79602289199829,30.261244946171974,</coordinates>
                            </LinearRing>
                        </outerBoundaryIs>
                    </Polygon>
                </Placemark>
            </Folder>
            <Folder>
                <name>Untitled layer</name>
                <Placemark>
                    <styleUrl>#line-000000-4</styleUrl>
                    <name>RFA14</name>
                    <Polygon>
                        <outerBoundaryIs>
                            <LinearRing>
                                <tessellate>0</tessellate>
                                <coordinates>-97.76755392551422,30.284103698805,0.0 -97.77020126581192,30.279346144221726,0.0 -97.77405023574829,30.27369885454351,0.0</coordinates>
                            </LinearRing>
                        </outerBoundaryIs>
                    </Polygon>
                </Placemark>
            </Folder>
    </Document>
</kml>

【问题讨论】:

    标签: c# linq xml-parsing


    【解决方案1】:

    您可以使用XDocument 和 XPath:

    var xDoc = XDocument.Load("Input.txt");
    
    var coordinates = xDoc.XPathSelectElement(@"Document/Folder/Placemark[name = 'RFA13']/Polygon/outerBoundaryIs/LinearRing/coordinates");
    

    你需要System.Xml.LinqSystem.Xml.XPath 在文件顶部导入的using

    【讨论】:

    • 它的值为 null
    • 因此您的文档看起来不像您发布的那个。我用给定的 XML 对其进行了测试,它返回了正确的 coordinates 元素。
    • 抱歉,忘记更新 kml 节点
    【解决方案2】:

    因此,您在 kml 元素中声明了 xml 命名空间,那么您应该使用它来提供元素名称:

    string name = "RFA13";
    var xdoc = XDocument.Load(path_to_xml);
    var ns = xdoc.Root.GetDefaultNamespace(); // get namespace
    // find placemark element with name you provided
    var placemark = xdoc.Descendants(ns + "Placemark")
                        .FirstOrDefault(p => (string)p.Element(ns + "name") == name);
    
    if (placemark != null) // check if placemark found
    {
        // assume every placemark has coordinates
        string coordinates = placemark.Descendants(ns + "coordinates")
                                      .Select(c => (string)c)
                                      .First();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2011-08-22
      • 2013-10-22
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2012-02-27
      相关资源
      最近更新 更多