Использование XmlReader для чтения XML - PullRequest
1 голос
/ 08 ноября 2011

У меня возникли проблемы с использованием 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. :(
        }
    }
}

Я знаю, что это не так много, но я немного растерялся, куда идти с этим. Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

1 голос
/ 03 июля 2012

Вот пример для чтения XML-файла с использованием XML Reader

   int intCount = 0;
    XmlReaderSettings objSettings = new XmlReaderSettings();
    objSettings.IgnoreWhitespace = true;
    objSettings.IgnoreComments = true;
    string booksFile = Server.MapPath("books.xml");
    using (XmlReader objReader = XmlReader.Create(booksFile, objSettings))
    {
        while (objReader.Read())
        {
            if (objReader.NodeType == XmlNodeType.Element && "Book" == objReader.LocalName)
            {
                 intCount++;
            }
            if (objReader.NodeType ==XmlNodeType.Text )
            {
                Response.Write("<BR />" + objReader.Value);
            }
        }
    }
    Response.Write(String.Format("<BR /><BR /><BR /><b> Total {0} books.</b>", intCount));
0 голосов
/ 08 ноября 2011

Возможно, вы захотите взглянуть на XpathNavigator . Синтаксис очень прост в использовании, намного проще, чем в XMLReader

Все, что вам нужно сделать, чтобы получить элемент EnumID = "1", это //Enums/Enum_Entry[@EnumID=1]

...