获取“
我正在读取 Kml 文件,更改地标的名称,然后再次保存。
var KmlFile = XDocument.Load("C:\\Inetpub\\wwwroot\\GeotagService\\Kml\\Photographs.kml");
XNamespace KmlNamespace = "http://www.opengis.net/kml/2.2";
// find the Placemarks in the Photos folder
IEnumerable<XElement> Placemarks = KmlFile.Element(KmlNamespace + "kml").Element(KmlNamespace + "Document").Element(KmlNamespace + "Folder").Elements(KmlNamespace + "Placemark");
foreach (XElement p in Placemarks){
p.Element(KmlNamespace + "name").Value = "testing";
}
KmlFile.Save("C:\\Inetpub\\wwwroot\\GeotagService\\Kml\\Photographs.kml");
然而,当我保存它时,每个元素都以 为前缀,如下所示:
<kml:Folder>
<kml:name>Photos</kml:name>
<kml:open>1</kml:open>
<kml:Placemark>
<kml:name>testing</kml:name>
<kml:LookAt>
<kml:longitude>-10.02717694938161</kml:longitude>
<kml:latitude>53.48672543547379</kml:latitude>
<kml:altitude>0</kml:altitude>
</kml:LookAt>
<kml:styleUrl>#msn_ylw-pushpin1</kml:styleUrl>
<kml:Point>
<kml:coordinates>-10.02867619360582,53.48651240326751,0</kml:coordinates>
</kml:Point>
</kml:Placemark>...
Tomarak 对 这个关于空白 xmlns 的问题给了我一个线索,即文档和元素的命名空间之间可能存在不一致,但我不明白我是怎么做的。有人知道吗?
编辑:原始文档(部分):
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>Connemara.net Photographs</name>
<open>1</open>
<Style id="sh_ylw-pushpin0">
<IconStyle>
<scale>1.3</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Folder>
<name>Photos</name>
<open>1</open>
<Placemark>
<name>Id:579</name>
<LookAt>
<longitude>-10.02717694938161</longitude>
<latitude>53.48672543547379</latitude>
<altitude>0</altitude>
<range>213.2931913230747</range>
<tilt>75.17546328115256</tilt>
<heading>69.89736514305363</heading>
<altitudeMode>relativeToGround</altitudeMode>
<gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
</LookAt>
<styleUrl>#msn_ylw-pushpin1</styleUrl>
<Point>
<coordinates>-10.02867619360582,53.48651240326751,0</coordinates>
</Point>
</Placemark>
...
</Folder>
</Document>
</kml>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web
技术交流群。
我正在读取 Kml 文件,更改地标的名称,然后再次保存。
var KmlFile = XDocument.Load("C:\\Inetpub\\wwwroot\\GeotagService\\Kml\\Photographs.kml");
XNamespace KmlNamespace = "http://www.opengis.net/kml/2.2";
// find the Placemarks in the Photos folder
IEnumerable<XElement> Placemarks = KmlFile.Element(KmlNamespace + "kml").Element(KmlNamespace + "Document").Element(KmlNamespace + "Folder").Elements(KmlNamespace + "Placemark");
foreach (XElement p in Placemarks){
p.Element(KmlNamespace + "name").Value = "testing";
}
KmlFile.Save("C:\\Inetpub\\wwwroot\\GeotagService\\Kml\\Photographs.kml");
然而,当我保存它时,每个元素都以
<kml:Folder>
<kml:name>Photos</kml:name>
<kml:open>1</kml:open>
<kml:Placemark>
<kml:name>testing</kml:name>
<kml:LookAt>
<kml:longitude>-10.02717694938161</kml:longitude>
<kml:latitude>53.48672543547379</kml:latitude>
<kml:altitude>0</kml:altitude>
</kml:LookAt>
<kml:styleUrl>#msn_ylw-pushpin1</kml:styleUrl>
<kml:Point>
<kml:coordinates>-10.02867619360582,53.48651240326751,0</kml:coordinates>
</kml:Point>
</kml:Placemark>...
Tomarak 对 这个关于空白 xmlns 的问题给了我一个线索,即文档和元素的命名空间之间可能存在不一致,但我不明白我是怎么做的。有人知道吗?
编辑:原始文档(部分):
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>Connemara.net Photographs</name>
<open>1</open>
<Style id="sh_ylw-pushpin0">
<IconStyle>
<scale>1.3</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Folder>
<name>Photos</name>
<open>1</open>
<Placemark>
<name>Id:579</name>
<LookAt>
<longitude>-10.02717694938161</longitude>
<latitude>53.48672543547379</latitude>
<altitude>0</altitude>
<range>213.2931913230747</range>
<tilt>75.17546328115256</tilt>
<heading>69.89736514305363</heading>
<altitudeMode>relativeToGround</altitudeMode>
<gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
</LookAt>
<styleUrl>#msn_ylw-pushpin1</styleUrl>
<Point>
<coordinates>-10.02867619360582,53.48651240326751,0</coordinates>
</Point>
</Placemark>
...
</Folder>
</Document>
</kml>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
明白了 - 问题是原始文档是这样开始的:
LINQ to XML 发现 KML 命名空间有一个特定的别名,因此使用它。如果删除该属性,它就可以正常工作:
Got it - the problem is that the original document starts like this:
LINQ to XML sees that there's a specific alias for the KML namespace, so uses that. If you remove that attribute, it works fine:
您需要使用命名空间管理器。以下是使用 XPath 选择必要标签然后更新其值的示例:
You need to use a namespace manager. Here's an example using XPath to select the necessary tags and then update their value: