Обратите внимание, что элемент Receipts
также находится в пространстве имен http://www.secretsonline.gov.uk/secrets
, поэтому XNamespace
также потребуется для доступа к элементу:
XElement MessageBody = xDoc.Element(ns + "Receipts");
В качестве альтернативы использованию пространств именчто вы можете использовать xpath «без учета пространства имен», используя local-name()
и namespace-uri()
, например,
/*[local-name()='SomeElement' and namespace-uri()='somexmlns']
Если вы пропустите предикат namespace-uri
:
/*[local-name()='SomeElement']
Будет соответствовать ns1:SomeElement
и ns2:SomeElement
и т. д. IMO Я всегда предпочел бы XNamespace
, где это возможно, и варианты использования для независимого от пространства имен xpath весьма ограничены, например, для анализа конкретных элементов в документах с неизвестными схемами (например, в служебной шине)или лучший анализ документов, где пространство имен может измениться (например, проверка будущего, где xmlns
изменяется в соответствии с новой версией схемы документа)