2012-01-03 3 views
0

저는 sharepoint 2010을위한 실버 라이트 웹 파트를 개발 중입니다. 제 프로젝트에서 sharepoint 서버의 xlsx 파일을 로컬 격리 저장소에 다운로드했습니다. 이제 xlsx 파일을 ICSharpCode.SharpZipLib.Silverlight dll로 압축 한 다음 해당 압축 파일을 대상 폴더에 압축을 해제합니다. 이 모든 것은 프로그래밍 방식으로 이루어집니다. 파일을 압축 해제하면 _reslx, customXml, docenter 코드 hereProps, xl이 대상 폴더 내에 생성됩니다. xl 폴더에는 main.xml 파일 인 sharedStrings.xml이 있습니다. 이 파일에는 원본 xlsx 파일의 모든 내용이 들어 있습니다. 나는 다음 XML 파일을 성공적으로로드하고있다.linq이 xml 파일을 읽지 못하는 이유는 무엇입니까?

xmlDoc = XDocument.Load(readFile); 

로드 된 XML 파일에 XML 선언이 표시되지 않습니다. 그러나 다음 문장으로 XML 선언을 볼 수 있습니다. 'A'내가 값 "{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>}" I로드 한 후 다음과 같은 XML 파일을 얻고 무엇입니까에서

XDeclaration a = xmlDoc.Declaration; 

.

<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="67" uniqueCount="39"> 
    <si> 
    <t>INVOICE</t> 
    </si> 
    <si> 
    <t>INVOICE #</t> 
    </si> 
    <si> 
    <t>Bill To:</t> 
    </si> 
    <si> 
    <t>DESCRIPTION</t> 
    </si> 
    <si> 
    <t>AMOUNT</t> 
    </si> 
    <si> 
    <t>TOTAL</t> 
    </si> 
    <si> 
    <t>FOR:</t> 
    </si> 
    <si> 
    <t>PBS</t> 
    </si> 
    <si> 
    <t>8108 SE Coconut St.</t> 
    </si> 
    <si> 
    <t>Hobe Sound, FL 33455</t> 
    </si> 
    <si> 
    <t>772-349-6317 Phone 772-675-9100 Fax</t> 
    </si> 
    <si> 
    <t>EIN 20-5268843</t> 
    </si> 
    <si> 
    <t>Provider 693068996</t> 
    </si> 
    <si> 
    <t>Rate</t> 
    </si> 
    <si> 
    <t>Units</t> 
    </si> 
    <si> 
    <t>DATE</t> 
    </si> 
    <si> 
    <t>Michael Nolan Ph.D. BCBA</t> 
    </si> 
    <si> 
    <t>____________________________________________</t> 
    </si> 
    <si> 
    <t>BCBA       Date</t> 
    </si> 
    <si> 
    <t>CLIENT:</t> 
    </si> 
    <si> 
    <t>Date:</t> 
    </si> 
    <si> 
    <t>Behavior Assistant- L. Bresson</t> 
    </si> 
    <si> 
    <t>Email:</t> 
    </si> 
    <si> 
    <t>1 Unit = 1 hour</t> 
    </si> 
    <si> 
    <t>TOTALS</t> 
    </si> 
    <si> 
    <t>[email protected]</t> 
    </si> 
    <si> 
    <t>Attn: Cecilia</t> 
    </si> 
    <si> 
    <t>Behavior Assistant- B. Bresson</t> 
    </si> 
    <si> 
    <t>Behaviror Ass't -N Giarratano</t> 
    </si> 
    <si> 
    <t>Signature of Representatives Approval   Date</t> 
    </si> 
    <si> 
    <r> 
     <t xml:space="preserve">Behavior Asst- </t> 
    </r> 
    <r> 
     <rPr> 
     <sz val="9" /> 
     <rFont val="Arial" /> 
     <family val="2" /> 
     </rPr> 
     <t>N Giarratano-</t> 
    </r> 
    <r> 
     <rPr> 
     <sz val="10" /> 
     <rFont val="Arial" /> 
     <family val="2" /> 
     </rPr> 
     <t>08</t> 
    </r> 
    </si> 
    <si> 
    <t>Behavior Asst- B. Bresson-08</t> 
    </si> 
    <si> 
    <t>Behavior Asst- L. Bresson-08</t> 
    </si> 
    <si> 
    <t>&lt;@Invoice&gt;</t> 
    </si> 
    <si> 
    <t>&lt;@For&gt;</t> 
    </si> 
    <si> 
    <t>&lt;@Client&gt;</t> 
    </si> 
    <si> 
    <t>&lt;@Caregiver&gt;</t> 
    </si> 
    <si> 
    <t>&lt;@Email,@Address,@City,@State,@Zip&gt;</t> 
    </si> 
    <si> 
    <t>&lt;@Date&gt;</t> 
    </si> 
</sst> 

이 xml 파일을 보려고 할 때 "열거 형 결과가 없습니다"라는 결과가 나타납니다. 다음 쿼리를 사용하고 있습니다.

var eles = from c in xmlDoc.Descendants("si") 
         select c; 

왜 내 xml 파일이 제대로 읽히지 않습니다. 내가 어디로 잘못 가고 있는지 말해 줄 수 있니? 또는 위의 문제를 해결할 수있는 링크를 제공해 주시겠습니까?

답변

3

네임 스페이스를 지정하십시오.

//XNamespace ns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"; 
//OR - suggested by @nulltoken 
XNamespace ns = xmlDoc.Root.Name.Namespace; 
var eles = from c in xmlDoc.Descendants(ns + "si") 
        select c; 
+0

사람들은이 실수를 너무 자주해서 Linq to XML 코드에서 예외가 발생할 때마다 Visual Studio에서 힌트를 제공해야합니다! – ColinE

+0

감사합니다. 그 일. 프로그래밍 방식으로이 네임 스페이스를 "http://schemas.openxmlformats.org/spreadsheetml/2006/main"검색하는 방법에 대한 코드를 제공해 주시겠습니까? –

+2

@ShaileshJaiswal'XNamespace ns = xDoc.Root.Name.Namespace;'시도 했습니까? – nulltoken

관련 문제