2010-02-22 3 views
4
<REETA xmlns="http://pria.org"> 
     <AFFIDAVIT> 
     <COUNTY_NAME>BOBBIES COUNTY</COUNTY_NAME> 
     <DOC_TYPE>DEED</DOC_TYPE> 
     <DOC_DATE>2010-02-19T05:14:58</DOC_DATE> 
     <GROSS_SELL_PRICE>200000.00</GROSS_SELL_PRICE> 
     <TAXABLE_SELL_PRICE>200000.00</TAXABLE_SELL_PRICE> 
     <EXCISE_TAX_STATE>2560.00</EXCISE_TAX_STATE> 
     <EXCISE_TAX_LOCAL>500.00</EXCISE_TAX_LOCAL> 
     <DELQ_INT_STATE>0.00</DELQ_INT_STATE> 
     <DELQ_INT_LOCAL>0.00</DELQ_INT_LOCAL> 
     <DELQ_PENALTY>0.00</DELQ_PENALTY> 
     <SUB_TOTAL>3060</SUB_TOTAL> 
     <STATE_TECH_FEE>5.00</STATE_TECH_FEE> 
     <PROCESSING_FEE>0.00</PROCESSING_FEE> 
     <TOTAL_DUE>3065</TOTAL_DUE> 
    - <INDIVIDUAL type="Buyer"> 
     <NAME>JANE DOE</NAME> 
     </INDIVIDUAL> 
    - <INDIVIDUAL type="Seller"> 
     <NAME>JON DOE</NAME> 
     </INDIVIDUAL> 
    - <PARCEL> 
     <NUMBER>3141614</NUMBER> 
     </PARCEL> 
     </AFFIDAVIT> 
</REETA> 


var affidavits = xDocument.Descendants("AFFIDAVIT"); 
var affidavitsTest = xDocument.XPathEvaluate("/reeta/AFFIDAVIT/COUNTY_NAME"); 

Ci-dessus est xml que je consomme d'une source tierce. Pour une raison quelconque, je ne peux pas analyser le xml avec l'une ou l'autre des méthodes que je décris ci-dessus. Toute idée serait très utile merci beaucoupAnalyse XML avec XDocument et XPath

+1

J'ai essayé la suggestion de chrissr et les suggestions d'Igor zevaka. Igor et Chris ont souligné que je devais inclure l'espace de noms. En incluant l'espace de noms, je suis incapable d'analyser le fichier XML. Qu'est-ce qui se passe est xdocument.descenants ("{http://pria.org} AFFIDAVIT"); renvoie le xml entier, et le xpathevaluate renvoie l'énumération non établie –

+0

Cela a fonctionné, merci. J'ai tapé l'URL dans le ns incorrect. Merci à la fois chrissr et igor –

Répondre

8

Vous n'avez pas spécifié l'espace de noms. Essayez:

XNamespace ns = "http://pria.org"; 
var affidavits = xDocument.Descendants(ns + "AFFIDAVIT"); 
+2

J'utiliserais ns.GetName() au lieu de concaténation de chaîne – Kugel

+2

@Kugel - En fait la suggestion sur MSDN est d'utiliser la concaténation de chaîne comme l'opérateur est remplacé à cette fin: "Pour C#, le recommandé approche pour créer un XName dans un espace de noms est de déclarer l'objet XNamespace, puis utiliser le remplacement de l'opérateur d'addition. " Trouvé dans la section «Création d'un nom XName dans un espace de noms»: http://msdn.microsoft.com/en-us/library/system.xml.linq.xname –

9

Ce bit

var affidavits = xDocument.Descendants("AFFIDAVIT"); 

ne fonctionne pas parce que le AFFIDAVIT est dans l'espace de noms http://pria.org. Cela devrait fonctionner (ont pas testé si):

var affidavits = xDocument.Descendants("{http://pria.org}AFFIDAVIT"); 

Alternative à cela, sans avoir à coder en dur l'espace de noms dans le code est d'utiliser l'espace de noms du nœud racine comme ceci:

var affidavits = xDocument.Descendants(xDocument.Root.Name.Namespace + "AFFIDAVIT"); 

Le chemin xpath ne fonctionne pas en raison de la casse. Pour commencer, il devrait être

var affidavitsTest = xDocument.XPathEvaluate("/REETA/AFFIDAVIT/COUNTY_NAME"); 

Comme dans REETA, non reeta. Il aura également des problèmes d'espace de noms une fois que la sensibilité à la casse sera résolue. Cependant, je ne sais pas trop comment spécifier les espaces de noms dans XPath.