Я импортирую некоторые данные из файла XML, который содержит пару пространств имен. Я использую вложенные классы для импорта данных на другом уровне. К сожалению, я не могу получить доступ к данным во внутренних классах. Я знаю, что проблема связана с пространствами имен, но я не знаю, как я могу разрешить их без изменения внутренних классов. Кто-нибудь знает, как я могу разрешить пространства имен в XDocument.
Это часть этого XML:
<TransXChange xmlns="http://www.transxchange.org.uk/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails" xsi:schemaLocation="http://www.transxchange.org.uk/ http://www.transxchange.org.uk/schema/2.1/TransXChange_registration.xsd" xml:lang="en" CreationDateTime="2004-06-09T14:20:00-05:00" > <Operators> <LicensedOperator id="O1" > <NationalOperatorCode>ABC</NationalOperatorCode> <OperatorAddresses> <CorrespondenceAddress> <apd:Line>45 City Road</apd:Line> </CorrespondenceAddress> </OperatorAddresses> </LicensedOperator> </Operators> </TransXChange>
Вы должны использовать пространство имен, совпадающее с тем, которое используется в вашем XML, с Linq to XML вы можете использовать XNamespace для этого, то есть:
XNamespace
XDocument doc = XDocument.Load("test.xml"); XNamespace apd = "http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"; var firstHit = doc.Descendants(apd + "Line").First();
Вы должны указать парсеру, как обращаться к пространству имен:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlElem.OwnerDocument.NameTable); nsmgr.AddNamespace("apd", "http://[PATH_TO_NAMESPACE_DOC]");
Это должно сделать это