我坚持使用一些LINQ to XML代码(<! - [CDATA []]>) - >

时间:2011-11-30 22:08:58

标签: .net xml linq cdata

我坚持使用一些LINQ to XML代码。在for循环中调用一个方法,该方法成功返回包含正确<placemark>个id的<placemark>标记的内容,该标记来自kml文件,总共有4000 <placemark>个。我成功地说了一个警告。 <description>代码包含<![CDATA[ ]]>,.net转换为<![CDATA[ ]] &gt;。无论如何我无法弄清楚这个解析,以便它保留所有的字符(>)。这是相关的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 ]]&gt;</description><point><coordinates>
                         -73.99337100000002,40.750354
                    </coordinates></point></placemark>

请注意美国之后的]]&gt;

1 个答案:

答案 0 :(得分:0)

当我运行你的getInfo方法时,看起来plMark.ToString(...)正在返回正确的文本,所以我会调查quKML,我可能会遗漏一些东西,但我看不出这是什么数据类型是

此外,如果quKML应该是基于XML的,我会考虑将您的<br>更改为自我结束标记<br/>

希望这有帮助。