无法解析XML

时间:2014-05-05 09:12:19

标签: c# xml

我尝试解析以下XML代码来提取数据,但它总是给出NULL指针异常。 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>

我想在HeaderDetails和targetField Text以及Inner Field的值中提取targetTable值。

我尝试了以下代码,但它无效。

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

xdoc.Descendants("HeaderDetails")

这样可以标记为<HeaderDetails> 的所有后代。如果我理解正确的话,您希望每<Field><HeaderDetails>个代码。

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
}

答案 1 :(得分:0)

我不认为所有 xml,因为XDocument.Load要求xml文件具有正确的xml标头标记。你有一个你期望能够解析的xml的最小但完整的例子吗?您是否尝试将xml文本复制到内联字符串并使用XDocument.Parse来排除您没有读取您认为的文件的可能性?您是否尝试在调试器中查看xdoc的内容?

相关问题