2017-04-06 21 views
0

私はメタデータを保存するために書いているXMLファイルからデータを取得するために、子孫、要素、および属性を永遠に試してきました。私は現時点ではできないし、私の仕事を妨げている。 XMLにLinqを使用していたとき、私は何の価値ももたらさず、なぜ起こったのか分からなかった。 XMLファイルにXElement内の値を取得

クイックルック

<ImageMetadata> 
     <ColorHistogram> 
      <Bin value="45861"/> 
      <Bin value="31989"/> 
     </ColorHistogram/> 
     <FaceLocations> 
      <FacePosition Y="379" X="205"/> 
      <FacePosition Y="366" X="372"/> 
     </FaceLocations> 
    </ImageMetadata> 

私は別の解決策を試してみました。最初は、私は、代わりにこのコードにつながる属性値を持つタグビンのBinValueと呼ばれるのXElementを持っていた。その後、XMLにLINQで怒っ取得した後、私は構造に私の文書のビットを変更し

//Yielding no results 

    from elements in doc.Descendants() 
    let element = elements.Element("BinValue") 
    select (long)element; 

タグと属性を持つこと。しかし、これは何の効果もありません。

var bins = XElement.Load(dbMetadata) 
       .Descendants("Bin") 
       .Select(e => e.Attribute("value").Value); 
// which gives me : System.ArgumentException: 'Illegal characters in path.' 

​​

私のユースケースを使用すると、XML構造から集まってきた可能性があり、以下である:イメージファイルの作成メタデータ。その部分はOpenCVで非常によく見えますが、それは私の問題ではありません。おそらく、私の問題についてより多くのフィードバックを得るために、私がXML文書を構築するために使用していたコードを追加することが適切でしょう。

イメージ上のデータを計算する部分は、F#を使用して行われました。 xmlドキュメントを作成する部分はC#を使用して行われました。そのため、私はコードを共有するために2つの要点を作成します。あなたのソリューションにEmgu OpenCVナゲットパッケージを追加してください。

  1. Image Analyzer - F#
  2. XMLDocumentParser - C#

**メタデータを生成しますF#コードを実行するために、任意の2つのローカルJPGファイルを使用してください!

**可能であれば、LINQ to XMLを使用してデータを取得する方法が必要です。 ColorHistogramとFaceLocations

UPDATE1

の両方のために私は私の問題が発生したときに、XMLファイルの状態を表示するために、コメントに頼まれました。あなたは以下のそれを見つけることができます。

Metadata file

+1

? – har07

+0

@ har07 dbMetadataの状態は、メタデータファイル内にあります。私は自分の投稿を更新しました –

+1

XMLファイルの一部しか表示していないようです。あなたが[mcve]を提供するのが役に立ちます。これは、例えば、ルート内のデフォルトのXML名前空間が原因である可能性があります。 (あなたがリンクしているファイルでは、たぶん...そうではないかもしれませんが、基本的にこの質問にはあまりにも混乱があります.1つの短いコンソールアプリケーションでこれを簡単に修正できます) –

答えて

1

を、次の試してみてください。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 


namespace ConsoleApplication49 
{ 

    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("ImageMetadata").Select(x => new 
      { 
       colorHistograms = x.Descendants("ColorHistogram").Select(y => new 
       { 
        bin = y.Elements("Bin").Select(z => new 
        { 
         value = (int)z.Attribute("value") 
        }).ToList() 
       }).FirstOrDefault(), 
       faceLocations = x.Descendants("FaceLocations").Select(y => new 
       { 
        facePosition = y.Elements("FacePosition").Select(z => new 
        { 
         X = (int)z.Attribute("X"), 
         Y = (int)z.Attribute("Y") 
        }).ToList() 
       }).FirstOrDefault() 

      }).FirstOrDefault(); 


     } 
    } 


} 
エラーが発生した `dbMetadata`の値だった何
関連する問題