0

特定のフルxpathを検索して内部テキストを返すメソッドを作成しました。しかし、私が取り組んでいるファイルにはすべて一意のノード名があるため、ノード名を渡すだけでうまくいくようにしたいと考えています。

現時点で私のコードはどのように見えるか:

public string FileInfo(string info)
{
    switch (info)
    {
        //FileInfo
        case "fileCreator":
            fileCreator = ztr.SelectSingleNode("//Document/FileInfo/Creator").InnerText;
            return fileCreator;
        case "fileName":
            fileName = ztr.SelectSingleNode("//Document/FileInfo/Name").InnerText;
            return fileName;
      //And so on with lots of other cases!!!

xmlノードである文字列の最初の出現を検索するようにするにはどうすればよいinfoので、愚かになってこれらすべてのswitchステートメントを書く必要はありません...

アップデート

私が欲しいものすべてがノードにあるわけではないことに注意してくださいFileInfo...私はそれに渡すノードを検索するメソッドが欲しいです! または、ノード自体の名前をこのメソッドに渡して、その値を取得したいと言ったほうがよいでしょう。この編集の前に混乱していたらごめんなさい!

xml ファイル内のその他の例:

/Document/RuntimeInfo/Operator

したがって、「Operator」をメソッドに渡したいのですが、その値を取得します! 正しいパスを発見する方法次第である必要があります。パットは一意であるため、このメソッドを実装することは悪い考えではありません。

4

4 に答える 4

1
return ztr.SelectSingleNode(string.Format("//Document/FileInfo/{0}", 
                            info.Replace("file", "").InnerText;

編集

検索されたノードが常に同じネスト レベルにある場合は、おそらくワイルド カードを使用できます。

return ztr.SelectSingleNode(string.Format("//Document/*/{0}", 
                                info).InnerText;

ちなみに、あなたの例では、ノードfileCreatorを見つけるために渡します。Creator打ち間違え ?

于 2012-07-11T14:41:23.673 に答える
1

これは仕事をしませんか?

var value = ztr.SelectSingleNode(string.Format("//{0}", info).InnerText;

于 2012-07-11T14:39:17.613 に答える
0

次の XPath を使用します。

//Document/FileInfo/[0]

コードは次のようになります。

public string FileInfo(string info)
{
    return ztr.SelectSingleNode("//Document/FileInfo/[0]").InnerText;
}

xpath の詳細については、こちらを参照してください。

于 2012-07-11T17:56:10.527 に答える
0

試す、

return ztr.SelectSingleNode(string.Format("//{0}[contains(name(..),'Info')]", info));

の場合、名前に が含まれる親ノードを持つ最初のノードinfoOperator返されます。OperatorInfo

于 2012-07-11T16:09:31.200 に答える