我正在尝试解析一些我认为在 .net 3.5 中使用 Linq 格式不正确的 xml,我需要从 xml 中获取数据并将数据插入变量,我一直在使用 XmlDocument 来解析 xml,非常感谢任何示例或帮助
XML——
<?xml version="1.0" encoding="UTF-8"?>
<centovacast version="2.2.4" host="my.domain.com">
<response type="success">
<message>Complete</message>
<data><row>
<field name="mount">/stream</field>
<field name="listenercount">0</field>
<field name="genre">Unspecified</field>
<field name="url">http://</field>
<field name="title"></field>
<field name="currentsong">Placebo - One Of A Kind</field>
<field name="bitrate">128</field>
<field name="sourceconnected">1</field>
<field name="serverstate">1</field>
<field name="sourcestate">1</field>
<field name="reseller">0</field>
<field name="ipaddress"></field>
<field name="port">13282</field>
<field name="proxy">0</field>
<field name="servertype">ShoutCast</field>
<field name="sourcetype">icescc</field>
</row><row><field></field></row></data></response></centovacast>
另一个问题是有时“currentsong”值可能包含特殊字符,例如! , % , ^ 等,我知道这有时会导致 xml 出现问题。
-- 我试图用来解析 XML 的代码
XElement xml = XElement.Parse(data);
var query = from p in xml.Elements("name")
select p;
foreach (var record in query)
{
MessageBox.Show(String.Format("Info: {0} {1}",
record.Element("url"),
record.Element("title")));
}
最佳答案
你的 LINQ 是错误的。您正在寻找一个名为 name
的元素。你没有。您有称为 field
的元素。
预计到达时间:好的,现在我正在重做,因为我对您的 XML 有了更好的了解。
var query = from r in xml.Elements("row")
select r;
您还需要查看 Attributes 集合,因为这就是 name
的含义:一个属性。以下内容来自内存,但它看起来像这样:
foreach(XElement row in query)
{
var urlElement = row.Elements("field").Single(qe=>qe.HasAttributes && qe.Attribute("name").Value == "url");
var titleElement = row.Elements("field").Single(qe => qe.HasAttributes && qe.Attribute("name").Value == "title");
MessageBox.Show(String.Format("Info: {0} {1}", urlElement.Value, titleElement.Value));
}
关于c# - 使用 Linq 解析格式错误的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055665/