<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。任何见解都会非常有用,非常感谢
答案 0 :(得分:9)
这一位
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中指定命名空间。
答案 1 :(得分:8)
您没有指定命名空间。尝试:
XNamespace ns = "http://pria.org";
var affidavits = xDocument.Descendants(ns + "AFFIDAVIT");