![](/img/trans.png)
[英]Parsing Network Packets in XML format using C#: XPath or XDocument
[英]Parsing xml with XDocument and XPath
<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");
以上是我從第三方來源消費的xml。 出於某種原因,我不能用上面描述的任何一種方法解析xml。 任何見解都會非常有用,非常感謝你
這一點
var affidavits = xDocument.Descendants("AFFIDAVIT");
因為AFFIDAVIT
位於http://pria.org
名稱空間中,所以不起作用。 這應該工作(雖然沒有測試過):
var affidavits = xDocument.Descendants("{http://pria.org}AFFIDAVIT");
替代方案,無需在代碼中對命名空間進行硬編碼就是使用根節點的命名空間,如下所示:
var affidavits = xDocument.Descendants(xDocument.Root.Name.Namespace + "AFFIDAVIT");
由於區分大小寫,xpath不起作用。 對於初學者來說,它應該是
var affidavitsTest = xDocument.XPathEvaluate("/REETA/AFFIDAVIT/COUNTY_NAME");
和REETA
,不是reeta
。 一旦解決了區分大小寫,它也會出現名稱空間問題。 我不太確定如何在XPath中指定命名空間。
您沒有指定命名空間。 嘗試:
XNamespace ns = "http://pria.org";
var affidavits = xDocument.Descendants(ns + "AFFIDAVIT");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.