Разбор XML с XDocument и XPath - PullRequest
4 голосов
/ 23 февраля 2010
<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 ни с одним из методов, которые я описал выше. Любое понимание было бы очень полезно большое спасибо

Ответы [ 2 ]

9 голосов
/ 23 февраля 2010

Этот бит

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.

8 голосов
/ 23 февраля 2010

Вы не указали пространство имен. Попробуйте:

XNamespace ns = "http://pria.org";
var affidavits = xDocument.Descendants(ns + "AFFIDAVIT");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...