【发布时间】:2015-03-19 13:50:54
【问题描述】:
我目前正在开发一个应用程序来解析多个 XML 文件。我同时使用了XmlDocument 和XmlReader。这是其中的一部分。
private void button5_Click(object sender, EventArgs e)
{
var filenames = System.IO.Directory
.EnumerateFiles(textBox1.Text, "*.xml", SearchOption.AllDirectories)
.Select(System.IO.Path.GetFullPath);
foreach (var f in filenames)
{
var sr = new MyStreamReader(f);
var resolver = new XmlUrlOverrideResolver();
resolver.DtdFileMap[@"XSEIF_R6.DTD"] = @"\\loc\XSEIF_R6.DTD";
resolver.DtdFileMap[@"XSEIF_R5.DTD"] = @"\\loc\XSEIF_R5.DTD";
resolver.DtdFileMap[@"XSEIF R5.DTD"] = @"\\loc\XSEIF_R5.DTD";
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
settings.XmlResolver = resolver;
XmlReader doc = XmlReader.Create(sr, settings);
while (doc.Read())
{
if ((doc.NodeType == XmlNodeType.Element) && (doc.Name == "var"))
{
if (newdoc.HasAttributes)
{
String vname = newdoc.GetAttribute("name");
String vno = newdoc.GetAttribute("number");
String pname = newdoc.GetAttribute("p-names");
File.AppendAllText(@"loca\Var.txt", vname + pname + Environment.NewLine);
}
}
}
}
MessageBox.Show("Done");
}
代码没有问题。现在我想添加另一个输出。我需要添加另一个名为“title”的标签的值。标签有多次出现。但我只需要第一次出现。我知道如何在XmlDocument 中做到这一点,但正如我之前使用XmlReader 所做的那样,我想继续这样做。
如何获取第一个title标签的值?
【问题讨论】:
-
你可以很容易地使用 linq to xml:
XDocument doc = XDocument.Load(string); XElement root = doc.Root; XElement wantedElement = root.Elements("title").First(); -
@CalebB OP 想知道如何使用 XmlReader,因此您将使用
XDocument.Load(reader)而不是字符串。 -
@JNYRanger 你是对的,我只是在表达另一种选择。 :)
-
@CalebB 我支持你,我是 linq to xml 的忠实粉丝,不惜一切代价避免
XmlDocument!
标签: c# xml-parsing xmlreader