2012-01-03 6 views
0

Je développe une partie web silverlight pour sharepoint 2010. Dans mon projet j'ai téléchargé le fichier xlsx du serveur sharepoint vers le stockage local isolé. Maintenant, je zippe le fichier xlsx avec la DLL ICSharpCode.SharpZipLib.Silverlight, puis je dézippe ce fichier zippé dans un dossier cible. Tout cela est fait par programmation. Lorsque je décompresse le fichier, il crée les dossiers _reslx, customXml, docenter code iciProps, xl dans le dossier cible. Dans le dossier xl, sharedStrings.xml est le fichier xml principal. Ce fichier contient tout le contenu du fichier xlsx d'origine. Je charge avec succès le fichier XML avec le code suivant. Je n'obtiens pas la déclaration xml dans le fichier xml chargé. Cependant, je peux voir la déclaration xml avec la phrase suivante.Pourquoi linq à xml ne lit pas le fichier xml?

XDeclaration a = xmlDoc.Declaration; 

Dans « un » Je reçois la valeur "{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>}" Je reçois le fichier XML suivant après le chargement.

<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> 

Quand je suis Quering sur ce fichier xml Je reçois le résultat dans « eles » comme « Énumération n'a donné aucun résultat ». J'utilise la requête suivante

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

Pourquoi mon fichier xml ne lit pas correctement. Pouvez-vous s'il vous plaît me dire où je vais mal? ou pouvez-vous s'il vous plaît me fournir un lien à travers lequel je peux résoudre le problème ci-dessus?

Répondre

3

Spécifiez l'espace de noms.

//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

Les gens font si souvent cette erreur que Visual Studio devrait fournir un indice chaque fois qu'une exception se produit dans le code Linq to XML! – ColinE

+0

Merci. Ça marche. Pouvez-vous s'il vous plaît me fournir un code sur la façon de récupérer "http://schemas.openxmlformats.org/spreadsheetml/2006/main" cet espace de noms par programmation. –

+2

@ShaileshJaiswal Avez-vous essayé 'XNamespace ns = xDoc.Root.Name.Namespace;'? – nulltoken