Как получить список узлов XML через XPath в котором есть XmlNamespace?

Пытаюсь найти элементы complexType в XSD документе через XPath. Но явно не понимаю как работаю неймспейсы и как настроить XmlNamespaceManager

    _document = New XmlDocument()
    _document.Load(current_xsd)

    Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(_document.NameTable)
    nsmgr.AddNamespace("xs", "http://common")

    Dim nodeList As XmlNodeList = _document.SelectNodes("//complexType", nsmgr)

    For Each node As XmlNode In nodeList


    Next

Часть документа:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Catalog" targetNamespace="http://catalog" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xc="http://common" xmlns="http://catalog">
  <xs:import namespace="http://common" schemaLocation="Common.xsd"/>
  <xs:complexType name="brigade">
    <xs:complexContent>
      <xs:extension base="xc:extraFieldContainer">
        <xs:sequence>
          <xs:element name="brigadier" type="staffPersonnelNumber" minOccurs="1" maxOccurs="1"/>
          <xs:element name="employees" type="employeCollection" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  
</xs:schema>

Ответы (3 шт):

Автор решения: Aziz Umarov

Используйте local-name

//*[local-name() = 'complexType']
→ Ссылка
Автор решения: Alexander Petrov

Элемент complexType в приведённом xml имеет префикс xs, который указывает на пространство имён http://www.w3.org/2001/XMLSchema. Именно это пространство имён нужно добавить в XmlNamespaceManager.

nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema")

Далее нужно добавлять наш префикс (который тоже назван xs, но он не обязан совпадать с префиксом в xml) в xpath.

Dim nodeList As XmlNodeList = _document.SelectNodes("//xs:complexType", nsmgr)
→ Ссылка
Автор решения: Yitzhak Khabinsky

c#

void Main()
{
    const string FILENAME = @"e:\Temp\current_xsd.xml";
    const string BRIGADE = "brigade";

    XDocument doc = XDocument.Load(FILENAME);
    
    // получить соответствующее пространство имен
    XNamespace ns = doc.Root.GetNamespaceOfPrefix("xs");

    // найти все дочерние элементы для BRIGADE
    var elems = doc.Descendants(ns + "complexType")
            .Where(d => d.Attribute("name").Value.Equals(BRIGADE))
            .Descendants(ns + "element");
    
    // перебрать последовательность для элементов BRIGADE 
    foreach (var elem in elems)
    {
        Console.WriteLine("name: '{0}', type: '{1}', minOccurs: '{2}', maxOccurs: '{3}'"
            , elem.Attributes("name").FirstOrDefault()?.Value
            , elem.Attributes("type").FirstOrDefault()?.Value
            , elem.Attributes("minOccurs").FirstOrDefault()?.Value
            , elem.Attributes("maxOccurs").FirstOrDefault()?.Value
            );
    }
}

результат

name: 'brigadier', type: 'staffPersonnelNumber', minOccurs: '1', maxOccurs: '1'
name: 'employees', type: 'employeCollection', minOccurs: '0', maxOccurs: '0'
→ Ссылка