我有一个.net 2.0的应用程序,我有一些困难,因为我更习惯linq。
xml文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<updates>
<files>
<file url="files/filename.ext" checksum="06B9EEA618EEFF53D0E9B97C33C4D3DE3492E086" folder="bin" system="0" size="40448" />
<file url="files/filename.ext" checksum="CA8078D1FDCBD589D3769D293014154B8854D6A9" folder="" system="0" size="216" />
<file url="files/filename.ext" checksum="CA8078D1FDCBD589D3769D293014154B8854D6A9" folder="" system="0" size="216" />
</files>
</updates>
文件下载并即时呈现:
XmlDocument readXML = new XmlDocument();
readXML.LoadXml(xmlData);
最初我认为它会用这样的东西:
XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("//files");
foreach (XmlNode node in nodes)
{
... im reading it ...
}
但是在阅读它们之前,我需要知道它们在我的进度条上使用了多少,而且在这种情况下我也对如何获取文件元素的属性一无所知。
我需要计数,因为它将用于更新进度条。
总的来说,它不是很好地阅读我的xml。
答案 0 :(得分:2)
在阅读之前我需要知道他们在进度条上使用了多少
使用XmlNodeList.Count
属性。下面的代码示例。
总的来说,它不是很好地阅读我的xml
以下是使用较旧的Xml库读取Xml的一些提示。
首先,XPath是你的朋友。它可以让你以一种非常模糊地与Linq相似的方式快速查询元素。在这种情况下,您应该更改XPath以获取子“文件”元素的列表,而不是父“files”元素。
XmlNodeList nodes = root.SelectNodes("//files");
变为
XmlNodeList files = root.SelectNodes("//file");
//ElementName
以递归方式搜索具有该名称的所有元素。 XPath非常酷,你应该读一下。以下是一些链接:
拥有这些元素后,您可以使用XmlElement.Attributes
属性以及XmlAttribute.Value
属性(file.Attributes["url"].Value
)。
或者您可以使用GetAttribute
方法。
Click this link to the documentation on XmlElement
了解更多信息。请记住在该页面上将.Net Framework版本切换为2.0。
XmlElement root = doc.DocumentElement;
XmlNodeList files = root.SelectNodes("//file"); // file element, not files element
int numberOfFiles = files.Count;
// Todo: Update progress bar here
foreach (XmlElement file in files) // These are elements, so this cast is safe-ish
{
string url = file.GetAttribute("url");
string folder = file.GetAttribute("folder");
// If not an integer, will throw. Could use int.TryParse instead
int system = int.Parse(file.GetAttribute("system"));
int size = int.Parse(file.GetAttribute("size"));
// convert this to a byte array later
string checksum = file.GetAttribute("checksum");
}
关于如何将校验和转换为字节数组,请参阅以下问题:
答案 1 :(得分:0)
编辑:
您应该可以使用nodes[0].ChildNodes.Count;
。
答案 2 :(得分:0)
您可以通过获取收藏的长度来计算多个元素:
int ElementsCount = nodes.Count;
您可以按以下方式阅读属性:
foreach(XmlNode node in nodes) {
Console.WriteLine("Value: " + node.Attributes["name_of_attribute"].Value;
}