2013-04-28 5 views
1

저는 XML과 LINQ에 새로운 기능이 있습니다. 여러 XML을 LINQ 자습서로 읽었지만 XML 문서 중 어느 것도 내 방식대로 포맷 된 것처럼 보이지 않습니다. 나는 그것이 (그리고 어떻게) 그것이 사물을 변화시키는 지 확신하지 못한다.XML에서 메타 데이터가 포함 된 LINQ

XDocument document = XDocument.Load("URLHERE.xml"); 

var term = from row in document.Descendants("row") 
select new 
{ 
Term = row.Element("Term").Value, 
Subject = row.Element("Subj").Value, 
Subject_Description = row.Element("Subj_desc").Value, 
}; 

: 나는 코드가 다음과 같이 보일 것입니다 생각 읽고 싶다면

<data> 
<row> 
    <Term>201320</Term> 
    <Subj>ACCT</Subj> 
    <Subj_desc>Accounting</Subj_desc> 
</row> 
<row> 
    <Term>201320</Term> 
    <Subj>ACCT</Subj> 
    <Subj_desc>Accounting</Subj_desc> 
</row> 
</data> 

:

나는 인터넷에서 읽은 모든 예제는

이 형식을 따라하는 것 문제는 다음과 같습니다. XML 문서가 동일한 형식을 따르지 않습니다. 각 용어에 대해 다른 태그를 반복하는 대신 상단에 일련의 메타 데이터가 있고 각 데이터 집합에 대해 SAME 태그가 사용됩니다.
<metadata> 
    <item name="TERM" type="xs:string" length="128"/> 
    <item name="SUBJ" type="xs:string" length="128"/> 
    <item name="SUBJECT_DESC" type="xs:string" length="512"/> 
</metadata> 
<data> 
<row> 
    <value>201320</value> 
    <value>ACCT</value> 
    <value>Accounting</value> 
</row> 
<row> 
    <value>201320</value> 
    <value>ACCT</value> 
    <value>Accounting</value> 
</row> 
</data> 

어떻게 그것에서 데이터를 추출 할

:

여기 내 XML 문서의 샘플입니까?

var term = from row in document.Descendants("row") 
select new 
{ 
Term = row.Element("value").Value, 
Subject = row.Element("value").Value, 
}; 

올바르게 보이지 않습니다. 나는 C# BTW를 사용하고있다. (태그가 충분한 지 말할 필요가 있을지 모르겠다.)

답변

0

XML의 형식이 올바르지 않으면 전체 문서를 캡슐화하는 루트 요소가 필요합니다. 같은

<?xml version='1.0' encoding='utf-8'?> 
<root> 
<metadata> 
    <item name="TERM" type="xs:string" length="128"/> 
    <item name="SUBJ" type="xs:string" length="128"/> 
    <item name="SUBJECT_DESC" type="xs:string" length="512"/> 
</metadata> 
<data> 
<row> 
    <value>201320</value> 
    <value>ACCT</value> 
    <value>Accounting</value> 
</row> 
<row> 
    <value>201320</value> 
    <value>ACCT</value> 
    <value>Accounting</value> 
</row> 
</data> 
</root> 

그런 다음 좀 추출 할 무엇을 따라, 당신은 데이터를 추출 할 수 있습니다 파일

var doc = XDocument.Load("file.xml"); 

를로드 할 수하여 XDocument를 사용하여, 당신은 지정되지 않습니다. 값을 잘못 포맷 된 XML 문서에 대해서는

XDocument document = XDocument.Load("c:\\tmp\\test.xml"); 
var rows = from i in document.Descendants("row") 
      select new {values = i.Elements("value").Select(a=>a.Value)}; 
+0

, 원래가 올바른지의는 IEnumerable을 포함하는 메타 데이터를

var item = doc.Descendants("metadata"); 

점점 행을 가져 오는 예는, 실수로 내 샘플을 그을 떠났다. 태그 사이에 무엇이든 추출하려고합니다. 결국 XML에 대한 쿼리를 실행하거나 목록에 모든 것을 던지려고합니다. 아직 결정하지 않았습니다. – rayden54

+0

내 대답의 마지막 LINQ 쿼리는 Row의 IEnumerable을 제공합니다. 그들을 통해 열거 할 때 IEnumerable은 그 행에 대한 3 개의 값을 포함하는 값을 가지고 있습니다. value 요소에는 속성이 없으므로 용어, 주제 등으로 식별 할 수 없으므로 값 요소는 모두 값 요소입니다. XML의 모습을 제어 할 수 있다면 속성을 추가하면 쿼리 할 때 훨씬 좋은 결과를 얻을 수 있습니다 – James

관련 문제