Разрешить пространства имен в XDocument c # - PullRequest
0 голосов
/ 16 ноября 2011

Я импортирую некоторые данные из файла 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>

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Вы должны использовать пространство имен, совпадающее с тем, которое используется в вашем XML, с Linq to XML вы можете использовать XNamespace для этого, то есть:

XDocument doc = XDocument.Load("test.xml");
XNamespace apd = "http://www.govtalk.gov.uk/people/AddressAndPersonalDetails";
var firstHit = doc.Descendants(apd + "Line").First();
0 голосов
/ 16 ноября 2011

Вы должны указать парсеру, как обращаться к пространству имен:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlElem.OwnerDocument.NameTable);
nsmgr.AddNamespace("apd", "http://[PATH_TO_NAMESPACE_DOC]");

Это должно сделать это

...