0

別のプログラムが使用しているxmlファイルがあります。これは、いくつかのiniファイルのパスを指しているので、それらを抽出することに興味があります。これらは、<add>-tagのkey="config1"下に(またはcofig2など)が付いた<appSettings>-tagです。これが私が読みたいサンプルファイルです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Comment -->
    <add key="config1" value="\\server1\software\pgrTool\Standard.ini.xml" />
    <!--<add key="config2" value="C:\HeadQuarter\PgrTool.xml" />-->
    <add key="config2" value="\\server1\software\pgrTool\Standard.xml" />
    <add key="hide-REM" value="no" />
  </appSettings>
</configuration>

ノードが欲しい

<add key="config1" value="\\server1\software\pgrTool\Standard.ini.xml" />
<add key="config2" value="\\server1\software\pgrTool\Standard.xml" />

次のLinqクエリを試しました。

var iniman = from c in XElement.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config").Elements("add")
                         where c.Attribute("key").Value.StartsWith("config")
                         select c.Attribute("value");

ただし、ノードは返されませんでした。これらの行とその他の構成を具体的に選択するにはどうすればよいですか?-LINQ to XMLを使用する行?

編集:私はこれを試しました

var configs = var iniman2 = from c in XElement.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config").Elements("configuration").Elements("appSettings")
                          where c.Attribute("key").Value.StartsWith("config")
                          select c.Attribute("value");

そして、それはノードも返しませんでした。

4

1 に答える 1

0

まず第一に、なぜXElement.Load代わりに? を使用しているのXDocument.Loadですか? XML ファイルは明らかに XML ドキュメントであるため、XDocumentインスタンスにロードする必要があります。

var doc = XDocument.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config");

そして、クエリに戻ります。Elementsメソッドは現在の要素の直接の子のみを検索するため、最初のものは値を返しませんでした。<appSettings>の代わりに要素を取得しようとしたため、2番目のものも機能しませんでし<add>た。

クエリは次のようになります。

var paths = from add in doc.Root.Element("appSettings").Elements("add")
            where ((string)add.Attribute("key")).StartsWith("config")
            select (string)add.Attribute("value");
于 2013-08-16T20:50:08.457 に答える