2014-05-05 1 views
-1

J'ai essayé d'analyser le code XML suivant pour extraire des données, mais cela donne toujours une exception de pointeur NULL. texte XML est comme suitImpossible d'analyser XML

<MyKnobs> 
<HeaderDetails targetTable="INVOICES"> 
<Field targetField="DOC_NO">Ordernumber</Field> 
<Field targetField="ORDER_NO">Ordernumber</Field> 
<Field targetField="PO">Ordernumber</Field> 
<Field targetField="CUSTCHAR1">Ordernumber</Field> 
<Field targetField="">Customer</Field> 
<Field targetField="ORDER_DATE">Orderdate</Field> 
<Field targetField="PO_DATE">Orderdate</Field> 
<Field targetField="CUSTCHAR2">Orderdate</Field> 
<Field targetField="PROMOTION_CODE">Couponname</Field> 
<Field targetField="">Coupon_discount</Field> 
<Field targetField="TAX_AMOUNT">Tax</Field> 
<Field targetField="SHIP_AMT">Shipping_cost</Field> 
<Field targetField="">Creditcardnumber</Field> 
<Field targetField="">Creditcardexpiration</Field> 
<Field targetField="">Creditcardtype</Field> 
<Field targetField="">Credit_authresp</Field> 
<Field targetField="">Credit_amount</Field> 
<Field targetField="">Credit_avs</Field> 
<Field targetField="">Security</Field> 
<Field targetField="">Security_response</Field> 
<Field targetField="">Processorid</Field> 
<Field targetField="">Credit_approval_num</Field> 
<Field targetField="MEMOS">Comments</Field> 
<Field targetField="">Giftwrapcharge</Field> 
<Field targetField="">Couponpercent</Field> 
<Field targetField="">Notes</Field> 
<Field targetField="">Returnbox</Field> 
<Field targetField="">Userorderid</Field> 
<Field targetField="">Returnbox2</Field> 
<Field targetField="CUSTCHAR3">Sampleorder</Field> 
<Field targetField="">Specialshippinginstructions</Field> 
<Field targetField="CUSTMEMO3">Howyoufoundus2</Field> 
<Field targetField="CUSTMEMO1">Referer</Field> 
<Field targetField="CUSTMEMO2">Entrypoint</Field> 
<Field targetField="DELIV_METH">Shipping_method</Field> 
<Field targetField="SALES_REP">Everestuser</Field> 
<Field targetField="CUSTCHAR4">Hoklevel</Field> 
<!-- Not Null Fields as following --> 
<!--WebSite retrieve from Dropdown--> 
<Field targetField="STATUS" DefaultValue="8"></Field> 
<Field targetField="SYNC_STATUS" DefaultValue="0"></Field> 
</HeaderDetails> 
<OrderDetails targetTable="X_INVOIC"> 
<Field targetField="ORDER_NO">ordernumber</Field> 
<Field targetField="ITEM_CODE">Item</Field> 
<Field targetField="ITEM_QTY">quantity</Field> 
<Field targetField="ITEM_PRICE">UnitPrice</Field> 
<Field targetField="">TotalPrice</Field> 
<Field targetField="">Name</Field> 
<Field targetField="">AccWareSKU</Field> 
<Field targetField="">canceled</Field> 
<Field targetField="">YahooId</Field> 
<!-- Not Null Fields as following --> 
<Field targetField="STATUS" DefaultValue="8"></Field> 
<Field targetField="SEQUENCE" DefaultValue="1"></Field> 
<!--SEQUENCE Increased by 1 --> 
<Field targetField="RFC_WARRANTY_PERIOD_TYPE" DefaultValue="0"></Field> 
<Field targetField="RFR_WARRANTY_PERIOD_TYPE" DefaultValue="0"></Field> 
<Field targetField="RFT_WARRANTY_PERIOD_TYPE" DefaultValue="0"></Field> 
</OrderDetails> 
</MyKnobs> 

Je veux extraire targettable valeur dans HeaderDetails et champCible Texte et valeurs de champ intérieur.

J'ai essayé le code suivant, mais cela ne fonctionne pas.

string WebsiteCodeXmlPath = (@"../../Configuration/FieldMapping.xml"); 
     var xdoc = XDocument.Load(WebsiteCodeXmlPath); 
     var Response = xdoc.Descendants("HeaderDetails").Select(c => (string)c).toString(); 

Aidez-nous s'il vous plaît.

+2

sur quelle ligne se trouve l'erreur? Quelle est l'exception? Déboguez-vous avec un point d'arrêt? – Xaruth

Répondre

1
xdoc.Descendants("HeaderDetails") 

Cela devient tous les descendants avec le nom de la balise <HeaderDetails>. Vous voulez toutes les étiquettes <Field> par <HeaderDetails>, si je vous ai bien compris.

var all_headerdetail_tags = xDoc.Descendants("HeaderDetails"); 

foreach(var headerdetail in all_headerdetail_tags) 
{ 
    var all_fields = headerdetail.Descendants("Field"); 

    //Now you have all fields of a HeaderDetail object 
} 
0

Je ne pense pas que ce soit tous le xml parce que XDocument.Load exige que le fichier xml ait une balise d'en-tête XML appropriée. Avez-vous un exemple minimal mais complet de XML que vous vous attendriez à pouvoir analyser? Avez-vous essayé de copier le texte xml dans une chaîne en ligne et d'utiliser XDocument.Parse pour exclure toute possibilité que vous ne lisiez pas le fichier que vous pensez être? Avez-vous essayé d'examiner le contenu de xdoc dans le débogueur?