2016-05-30 3 views
1

I私が探している属性の値を返すために、以下の方法で、しかし、私は私の道はこの/MessageあるExpression Must evaluate to a node-setC#のXMLDocumentケースから文字列を返す小文字を区別しない検索

取得を持っているし、私の属性はsequenceです

ちょうど私が私がしたい値を取得し、この

XmlNode mytestNode = xDoc.SelectSingleNode(xPath); 
string attributec = mytestNode.Attributes[attribute].Value; 

しかしattribute nameが同じ場合には戻ってこないすべての時間を行う場合

は、ここでは、私の方法

public static string xmlNode_GetValue_From_Attribute(XmlDocument xDoc, string xPath, string attribute) 
     { 

      return xDoc.SelectSingleNode(xPath + "/@" + "[translate(" + attribute + ", ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’, ‘abcdefghijklmnopqrstuvwxyz’)").Value; 

     } 

答えて

0

現在、あなたの文字列の連結コードが@すなわち、有効なXPath式がattribute変数の値を囲む引用符が欠落し、有効なノード選択されていないではない、以下の形式で表現を生成しています

/@[translate(
    your attribute variable value, 
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
    'abcdefghijklmnopqrstuvwxyz' 
) 

私はこれを正しく理解していれば、あなたは次のXPath式を生成します:

を最後に ]を逃します210
/@*[ 
    translate(
     name(), 
     'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
     'abcdefghijklmnopqrstuvwxyz' 
    ) = 'your attribute variable value' 
] 

上記の属性は、属性名がattributeの可変値で、大文字小文字を区別しない属性を返します。だから、対応するC#のコードは次のようになります。

string attributeQuery = @"/@*[ 
    translate(
     name(), 
     'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
     'abcdefghijklmnopqrstuvwxyz' 
    ) = '{0}' 
]"; 
attributeQuery = string.Format(attributeQuery, attribute.ToLower()); 
return xDoc.SelectSingleNode(xPath + attributeQuery).Value; 

NB:すべてのXPathは、上記だけでは(たぶん)読みやすくするためにラインにラップされています。

関連する問題