-1

私は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>
4

3 に答える 3

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;
于 2012-05-31T10:39:49.383 に答える
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ファイルを開いたり、好きなことをしたりできます。

于 2012-05-31T10:53:08.723 に答える
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());
        }

XMLファイルのPSは閉じられていません:)

于 2012-05-31T11:00:37.287 に答える