2017-01-17 1 views
1

大文字小文字を区別しないでxmlからXPathを使用して<aw:Child1>要素を取得する必要があります。XPathSelectElementsを使用した大文字と小文字の区別なしの選択

<aw:Root xmlns:aw='http://www.test-works.com'> 
    <aw:Child uid='Test1'>child one data 1</aw:Child> 
    <aw:Child uid='Test2'>child one data 2</aw:Child> 
    <aw:Child uid='Test3'>child one data 3</aw:Child> 
</aw:Root> 

ここに私のコードですが、それはすべての要素を返すことはありません:私はケース

var inputQuery = "./aw:Child[@uid='Test1']"; 

を修正するために、パスを変更しかし、マッチする要素があるとき

 string markup = @" 
<aw:Root xmlns:aw='http://www.test-works.com'> 
    <aw:Child uid='Test1'>child one data 1</aw:Child> 
    <aw:Child uid='Test2'>child one data 2</aw:Child> 
    <aw:Child uid='Test3'>child one data 3</aw:Child> 
</aw:Root>"; 
      var reader = XmlReader.Create(new StringReader(markup)); 
      var root = XElement.Load(reader); 
      var nameTable = reader.NameTable; 
      var namespaceManager = new XmlNamespaceManager(nameTable); 
      namespaceManager.AddNamespace("aw", "http://www.test-works.com"); 

      var inputQuery = "./aw:Child[@uid='test1']"; //Auto generated 

      var elements = root.XPathSelectElements(inputQuery, namespaceManager); 
      foreach (var el in elements) 
       Console.WriteLine(el); 

私は結果を得ます動的に生成され、常に小文字です。要素を一致させている間に大文字小文字を無視する方法はありますか?

+1

XMLは大文字と小文字が区別されますので、あなたは大文字小文字を区別しない方法で要素を選択する理由は?とにかく、すべての要素(この場合は '/ */*'を使用)を選択して、 'foreach'ループの名前/フィルターをチェックするだけです。 – Pawel

答えて

0

XPath 1.0のtranslate()関数を使用して、すべての大文字を小文字に置き換えることができます。あなたのケースで それは次のようになります。

var inputQuery = "./aw:Child[translate(@uid, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='test1']"; 
関連する問題