我在xml文件中有以下数据:
<Critic-List>
<bruce-bennett>
<Movie Title="White House Down (2013)" Score="C+" Like="false"/>
<Movie Title="Despicable Me 2 (2013)" Score="A-" Like="true"/>
<Movie Title="World War Z (2013)" Score="B+" Like="true"/>
<Movie Title="Man of Steel (2013)" Score="B+" Like="true"/>
我如何编写
代码C#中的XML阅读器似乎更倾向于返回&#34;内部文本&#34;我想知道是否应该将我的xml数据存储在内部文本而不是属性中,而不是属性值。对我来说,检索属性的数据值会更方便,但是我是不确定这些参数是否存在......
任何帮助或建议的阅读将非常感谢!
答案 0 :(得分:1)
我简化了你的XML,但想法是一样的。作为第一步,您需要构建满足条件的属性列表,然后选择第一个发现的元素。
const string myXml = @"<Critic-List>
<Movie Title='White House Down (2013)' Score='C+' />
<Movie Title='Despicable Me 2 (2013)' Score='A-' />
<Movie Title='World War Z (2013)' Score='B+' />
<Movie Title='Man of Steel (2013)' Score='B+' />
</Critic-List>";
var el = XElement.Parse(myXml);
var q1 = el.Elements()
.Select(n => (n.Attribute("Title").Value == "Despicable Me 2 (2013)") ? n.Attribute("Score") : null)
.First(n => n != null);
答案 1 :(得分:1)
您可以像这样使用LINQ to XML:
XElement doc = XElement.Load("File.xml");
var node = (from e in doc.Elements()
where (string)e.Attribute("Title") == "Despicable Me 2 (2013)"
select e).SingleOrDefault;
var like = (bool)node.Attribute("Like");
答案 2 :(得分:1)
这是一种非常干净的方式。
XElement ele = XElement.Parse(movieXml);
string movie = "Despicable Me 2 (2013)";
string answer = ele.Descendants("Movie")
.Where(x => x.Attribute("Title").Value == movie)
.Select(x => x.Attribute("Like").Value)
.FirstOrDefault();
答案 3 :(得分:1)
我不确定你尝试使用什么方法来获得结果,LINQ to XML绝对是一个很好的方法。如果您正在尝试使用XPath,那么您将获得相同的结果。
var xml = @"<Critic-List>
<bruce-bennett>
<Movie Title=""White House Down (2013)"" Score=""C+"" Like=""false""/>
<Movie Title=""Despicable Me 2 (2013)"" Score=""A-"" Like=""true""/>
<Movie Title=""World War Z (2013)"" Score=""B+"" Like=""true""/>
<Movie Title=""Man of Steel (2013)"" Score=""B+"" Like=""true""/>
</bruce-bennett>
</Critic-List>";
XElement doc = XElement.Parse(xml);
var node = doc.XPathSelectElement("//Movie[@Title='Despicable Me 2 (2013)']");
var like = node.Attribute("Like").Value;
w3schools是一个很好的网站,可以获得有关XPath的一些教程。选项始终是扩展视野的好方法。