我坚持使用一些LINQ to XML代码。在for循环中调用一个方法,该方法成功返回包含正确<placemark>
个id的<placemark>
标记的内容,该标记来自kml文件,总共有4000 <placemark>
个。我成功地说了一个警告。 <description>
代码包含<![CDATA[ ]]>
,.net转换为<![CDATA[ ]] >
。无论如何我无法弄清楚这个解析,以便它保留所有的字符(>
)。这是相关的c#代码:
...在主要班级
public partial class ResultsGeneral : BasePage {
public List<string> rightVenues = new List<string>();
XNamespace spc = "http://www.opengis.net/kml/2.2";
XDocument Placemarks = XDocument.Load(HttpContext.Current.Server.MapPath("~/venuesCompleteGood.kml"));
...在protected void Page_Load(object sender, EventArgs e) {
for (int q = 0; q <= rightVenues.Count; q++) {
getInfo(rightVenues[q]); //get info contains a list of placemark ids
};
...
public void getInfo(string ids) {
var aPlacemark =
from plMark in Placemarks.Descendants(spc + "Placemark")
where plMark.Attribute("id").Value.Equals(ids.ToString())
select plMark;
foreach (XElement plMark in aPlacemark) {
quKML.Text = quKML.Text + "<br>" +
plMark.ToString(SaveOptions.DisableFormatting);
}
}
...... kml的片段:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark id="33">
<name>
Madison Square Garden
</name>
<description>
<![CDATA[<br>
4 Penn Plaza<br>
<br>
New York<br>
NY<br>
10001<br>
United States of America ]]>
</description>
<Point>
<coordinates>
-73.99337100000002,40.750354
</coordinates>
</Point>
</Placemark>
...返回的部分内容:
<placemark id="33" xmlns="http://www.opengis.net/kml/2.2"><name>
Madison Square Garden
</name><description><!--[CDATA[<br-->
4 Penn Plaza<br>
<br>
New York<br>
NY<br>
10001<br>
United States of America ]]></description><point><coordinates>
-73.99337100000002,40.750354
</coordinates></point></placemark>
请注意美国之后的]]>
。
答案 0 :(得分:0)
当我运行你的getInfo方法时,看起来plMark.ToString(...)正在返回正确的文本,所以我会调查quKML,我可能会遗漏一些东西,但我看不出这是什么数据类型是
此外,如果quKML应该是基于XML的,我会考虑将您的<br>
更改为自我结束标记<br/>
。
希望这有帮助。