2017-04-06 1 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.' 

Getting values from xelement

내 사용 사례는 XML 구조에서 수집 할 수있는 다음과 같다 : 이미지 파일의 생성 메타 데이터. 그 부분은 OpenCV로 꽤 견고 해 보이는데 그건 내 문제가 아닙니다. 어쩌면 내 문제에 대한 피드백을 더 받기 위해 XML 문서를 작성하는 데 사용한 코드를 추가하는 것이 적절할 것입니다.

이미지의 데이터를 계산하는 부분은 F #을 사용하여 수행되었습니다. xml 문서를 만드는 부분은 C#을 사용하여 수행되었습니다. 그렇기 때문에 코드를 공유하기 위해 두 가지 요령을 만들 예정입니다. Emgu OpenCV Nugget 패키지를 솔루션에 추가하십시오.

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

** 메타 데이터를 생성합니다 F # 코드를 실행하기 위해 두 지역의 JPG 파일을 사용!

** 가능하면 LINQ to XML을 사용하여 데이터를 검색하는 방법이 필요합니다. ColorHistogram 및 FaceLocations

갱신 1

모두 들어 내 문제가 발생했을 때 xml 파일의 상태를 표시하는 코멘트에 요청했다. 아래를 찾을 수 있습니다

Metadata file

+1

입니까? – har07

+0

@ har07 dbMetadata의 상태는 메타 데이터 파일 안에 있습니다. 내 게시물을 업데이트했습니다. –

+1

XML 파일의 일부만 표시 한 것처럼 보입니다. [mcve]를 제공하면 도움이 될 것입니다. 이것은 예를 들어 루트의 기본 XML 네임 스페이스 때문일 수 있습니다. (당신이 링크 한 파일로, 아마 ...하지만 기본적으로이 질문에 너무 많은 혼란이 있습니다. 하나의 짧은 콘솔 앱으로 이것을 수정하는 것이 훨씬 간단합니다.) –

답변

1

시도가 다음 오류가 발생했을 때`dbMetadata`의 값이 무엇

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(); 


     } 
    } 


}