Найти узел по имени с помощью Nokogiri - PullRequest
5 голосов
/ 04 января 2012

Попытка найти узлы по имени.Вот мой xml:

<Project>
 <ItemGroup>
    <Compile Include="..\..\CommonAssemblyInfo.cs">
      <Link>Properties\CommonAssemblyInfo.cs</Link>
    </Compile>
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\myproject1.csproj">
      <Name>Myproject1</Name>
    </ProjectReference>
    <ProjectReference Include="..\Myproject2.csproj">
      <Name>MyProject2</Name>
    </ProjectReference>
    <ProjectReference Include="..\myproject3.csproj">
      <Name>MyProject3</Name>
    </ProjectReference>
 </ItemGroup>
</Project>

Вот мой код, чтобы получить все узлы Name сверху XML:

  f = File.open(projectpath)
  @doc = Nokogiri::XML(f)
  #print f.read
  names = @doc.xpath("Name")
  print names

  f.close  

Мой код ничего не получил из поиска XML.

Ответы [ 2 ]

7 голосов
/ 04 января 2012

Вам нужна конструкция пути с подстановочными знаками (//), в противном случае вы просто смотрите на элементы на корневом уровне.

names = @doc.xpath("//Name")

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

names = @doc.css("Name")

Или, возможно, вы использовали метод search, который пытается сделать обоснованное предположение, используете ли вы CSS или XPath. Это будет работать правильно в этом случае:

names = @doc.search("Name")
0 голосов
/ 04 января 2012
names = @doc.xpath("//itemgroup//name")
...