C# XmlNodeList xPath,带有用于筛选节点的命名空间

C# XmlNodeList xPath,带有用于筛选节点的命名空间,c#,xpath,namespaces,C#,Xpath,Namespaces,我有一个要分析的文件: <?xml version="1.0" encoding="utf-8"?> <Schema Namespace="DataModel.Store" Alias="Self" Provider="System.Data.SqlServerCe.3.5" ProviderManifestToken="3.5" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchem

我有一个要分析的文件:

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="DataModel.Store" Alias="Self" Provider="System.Data.SqlServerCe.3.5" ProviderManifestToken="3.5" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
  <EntityContainer Name="DataModelStoreContainer">
    <EntitySet Name="erpBarcode" EntityType="DataModel.Store.erpBarcode" store:Type="Tables" />
    ...
    ...
  </EntityContainer>
  <EntityType Name="erpBarcode">
    <Key>
      <PropertyRef Name="ID" />
    </Key>
    <Property Name="ID" Type="uniqueidentifier" Nullable="false" />
    <Property Name="Barcode" Type="nvarchar" Nullable="false" MaxLength="100" />
    <Property Name="ProductNo" Type="nvarchar" Nullable="false" MaxLength="100" />
    <Property Name="UnitNo" Type="int" Nullable="false" />
    <Property Name="IsActive" Type="bit" Nullable="false" />
  </EntityType>
  <EntityType Name="erpCustomer">
   ...
  </EntityType>
  <EntityType Name="erpOperation">
   ...
  </EntityType>
  ...
 </Schema>

默认名称空间是继承的

var xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);

xmlnsManager.AddNamespace("ssdl", "http://schemas.microsoft.com/ado/2009/02/edm/ssdl");

var xpath = @"/ssdl:Schema/ssdl:EntityType";
// ------------------------^^^^^

XmlNodeList nodeList = xmldoc.SelectNodes(xpath, xmlnsManager);
请注意,这也会起作用

var xpath = @"//ssdl:EntityType";
注:没有充分的理由使用
ns1
作为前缀,使用自然出现的东西更有意义

var xpath = @"//ssdl:EntityType";