如何读取xml文件并写入列表然后获取txt文件的路径并读取它

时间:2012-05-31 10:26:08

标签: c# xml

我有一个xml文件。这个文件有我的日志文件路径(txt)。这个xml文件有一些模块,每个模块都有日志文件路径。所以我想读取xml并列出每个模块的详细信息然后我想读取txt文件(使用路径)。任何人都可以提出一些想法来做这些事情。

谢谢, 这是我的xml文件

        <?xml version="1.0" encoding="utf-8" ?> 
   <Modules>    
    <ServiceHost>
     <LogType value="FatalErrorLog">
     <Fields>
      <FileName>ServiceWS.log</FileName>
      <FileLocation>\\10.8.8.21\lv0\Logs\Prod\Service\</FileLocation>
      <IsLogFilterAvailable value="true" />
      <IsDateFilterAvailable value="true" />
      <IsDownloadRawFile value="false" />
    </Fields>
  </LogType>
   <LogType value="DebugLog">
     <Fields>
      <FileName>ServiceDebugWS.log</FileName>
      <FileLocation>\\10.8.8.21\lv0\Logs\Prod\ServiceHost</FileLocation>
      <IsLogFilterAvailable value="true" />
      <IsDateFilterAvailable value="true" />
      <IsDownloadRawFile value="false" />
    </Fields>
  </LogType>
</ServiceHost>
<Product value="Debug">
   <LogType>
     <Fields>
      <FileName>Product.log</FileName>
      <FileLocation>\\10.8.8.21\lv0\Logs\Prod\Endor\</FileLocation>
      <IsLogFilterAvailable value="true" />
      <IsDateFilterAvailable value="true" />
      <IsDownloadRawFile value="false" />
    </Fields>
  </LogType>
</Product>
<Portal value="Debug">
   <LogType>
     <Fields>
      <FileName>Portal.log</FileName>
      <FileLocation>\\10.8.8.21\lv0\Logs\Prod\SupportPortal\</FileLocation>
      <IsLogFilterAvailable value="true" />
      <IsDateFilterAvailable value="true" />
      <IsDownloadRawFile value="false" />
    </Fields>
  </LogType>
</Portal>
<Modules>

3 个答案:

答案 0 :(得分:0)

这应该让你开始:

XmlDocument xml_Document = new XmlDocument();
xml_Document.Load("C:\\settings.xml");
var list = xml_Document.SelectNodes("//LogType [@value='Debug']");
var logLocation = list.Item(0).SelectNodes("//FileLocation").Item(0).Value;

答案 1 :(得分:0)

您可以使用REGEX查找xml文件中的任何内容。假设您想要在数组中获取txt文件名,那么您可以通过以下方式来实现......

// get the string start with <FileLocation> and end with </FileLocation> 
MatchCollection v = Regex.Matches(input_string, "<FileLocation>(.)*</FileLocation>", RegexOptions.IgnoreCase);

            string[] arr=new string[total_length];
            int counter = 0;
            foreach (Match i in v)
            {

                string s = i.Value;
                s= s.Replace("<FileLocation>", "");
                s=s.Replace("</FileLocation>","");
                arr[counter] = s;
                counter++;

            }

您可以通过这种方式查找和提取任何字符串。

然后你可以使用arr数组打开txt文件或做任何你想做的事。

答案 2 :(得分:0)

你可以使用XmlDocument作为点 nunespascal 使用XPath,这更舒服(虽然与Xml相似)

        XPathDocument xdoc = new XPathDocument(filename);
        XPathNavigator xnav = xdoc.CreateNavigator();
        // path in XML to file location
        XPathNodeIterator xiter = xnav.Select("/Modules/ServiceHost/LogType/Fields/FileLocation");
        foreach(var item in xiter)
        {
            Log(item.ToString());
        }

P.S。在您的XML文件中没有关闭:)