powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XPath
3 сообщений из 3, страница 1 из 1
XPath
    #39449273
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, день добрый. Чот завтыкал, не могу понять, почему не работают xpath выражения.
Есть вот такой файлик:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{9FE2A8A4-504E-4DD0-A3EF-6AAAD04AC37D}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ProjectModify</RootNamespace>
    <AssemblyName>ProjectModify</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <Reference Include="Test2">
      <HintPath>..\Test2\bin\Debug\Test2.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Test1\Test1.csproj">
      <Project>{b6936758-bf33-4a01-860a-a7b9491a32bd}</Project>
      <Name>Test1</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
</Project>


хочу получить список ItemGroup. Загружаю файл так:
Код: c#
1.
2.
var doc = new XmlDocument();
doc.Load(filePath);


Пробовал следующее:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
//в doc.InnerXml лежит весь xml файл, ну т.е. его содержимое
doc.SelectNodes("//Project/ItemGroup");
doc.SelectNodes("/Project/ItemGroup");
doc.SelectNodes("Project/ItemGroup");

//в doc.DocumentElement.InnerXml лежит все содержимое блока Project
doc.DocumentElement.SelectNodes("//ItemGroup");
doc.DocumentElement.SelectNodes("/ItemGroup");
doc.DocumentElement.SelectNodes("ItemGroup");



В doc.DocumentElement.ChildNodes лежат теги Import, PropertyGroup, ItemGroup. Не могу понять, почему XPath не работает, есть у кого какие идеи?
...
Рейтинг: 0 / 0
XPath
    #39449498
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие тут идеи, всё и так понятно - у корневого элемент объявлен дефолтный неймспейс, узлы внутри него принадлежат этому неймспейсу, и в XPath'е должны адресоваться через этот неймспейс:
Код: c#
1.
2.
3.
var xnsm = new XmlNamespaceManager(xd.NameTable);
xnsm.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003");
Console.WriteLine(xd.SelectNodes("/msbuild:Project/msbuild:ItemGroup", xnsm).Count);


- 4 узла.
...
Рейтинг: 0 / 0
XPath
    #39449509
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныКакие тут идеи, всё и так понятно - у корневого элемент объявлен дефолтный неймспейс, узлы внутри него принадлежат этому неймспейсу, и в XPath'е должны адресоваться через этот неймспейс:
Код: c#
1.
2.
3.
var xnsm = new XmlNamespaceManager(xd.NameTable);
xnsm.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003");
Console.WriteLine(xd.SelectNodes("/msbuild:Project/msbuild:ItemGroup", xnsm).Count);


- 4 узла.
Спасибо большое! Не знал про неймспейсы
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XPath
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]