【发布时间】:2011-11-08 18:04:36
【问题描述】:
我在使用 XmlReader 读取 XML 文件时遇到了一些问题。我可以打开和关闭文件(我认为),但是在解析我需要的信息时,我有点迷茫。这是我需要解析的文件位:
<?xml version="1.0" encoding="UTF-8"?>
<database name="Dictionary">
<data>
<Translations>
<Translation UniversalAbbv="Enu" lang="en" localization="US" unicode="0">
<Set>
...
</Set>
<Set>
...
</Set>
<Set>
<CaseSensitive value="0" />
<Enums translate="1">
<Enum_Entry ENUM_H="STOPRUN_STOP" EnumID="0" EnumString="Stop" SetID="160" />
<Enum_Entry ENUM_H="STOPRUN_RUN" EnumID="1" EnumString="Run" SetID="160" />
<Enum_Entry ENUM_H="STOPRUN_HOLD " EnumID="2" EnumString="Hold" SetID="160" />
</Enums>
<IncludeFiles_cs name="CSFile" value="StopRun.cs" />
<IncludeFiles_h name="Header" value="NULL" />
<IncludeFiles_java name="Java" value="NULL" />
<SetID value="160" />
<SetName value="Stop Run" />
<TwoSet ENUM_H="STOPRUN_ENUM_SET" />
</Set>
<Set>
...
</Set>
</Translation>
</Translations>
</data>
</database>
我需要找到EnumID="0"或EnumID="1"(或"STOPRUN_STOP"或"STOPRUN_RUN")并分别拉出"Stop"或"Run"字符串。到目前为止,这是我的代码:
static class Dictionary
{
static private XmlReader Reader = null;
static public void Open()
{
XML_Generator.Dictionary.Reader = XmlReader.Create(XML_Generator.Program.DictionaryFilename);
}
static public void Close()
{
XML_Generator.Dictionary.Reader.Close();
}
static public void Read()
{
while (Reader.Read())
{
Trace.TraceInformation(XML_Generator.Dictionary.Reader.ReadElementContentAsString()); // <-- This throw an error. :(
}
}
}
我知道这并不多,但我有点不知道该去哪里。任何帮助,将不胜感激。谢谢。
【问题讨论】:
-
您使用 XMLReader 而不是 LINQ 甚至 XMLDocument 有什么原因吗?
-
我通常会读入一个数据集,然后对其进行索引以查找我感兴趣的值。很想看看其他人是如何做到的。
-
@AlexMendez:我以前从不需要解析 XML 文件。 LINQ 是 .NET 类吗?
-
@timmy:数据集是如何使用的?你能链接到一个例子吗?
-
LINQ 是一种语言集成查询,是 .net 3.5 及更高版本的一部分。它允许您以与 sql server 类似的方式查询您的 xml。以下是一些示例:msdn.microsoft.com/en-us/library/bb397965.aspx 和 msdn.microsoft.com/en-us/library/bb387061.aspx
标签: c# xml .net-3.5 xpath xmlreader