Xpath 本地化

Xpath Localisation

我卡在 Xpath 表达式上了.. 你能帮我找到 Xpath 来获得像 "SecSE" 这样的 "Entry" 元素吗? 我也想获取itemName属性内容:)

非常感谢

这是我的 XML :

<?xml version="1.0" encoding="UTF-8"?>
  <MLiveDataLog>
  <ControllerPath>Controller</ControllerPath>
  <description>Autogenerated XML export file</description>
  <Log xmlns="http://iec.ch/61400/ews/1.0/">
       <LogName>AllLiveData</LogName>
     <Entry tabName="Test" itemName="Turbine" aggregation="2" description="">
       <TimeOfEntry>
         <SecSE>1427199750</SecSE>
         <Tq>
           <LSK>false</LSK>
         </Tq>
       </TimeOfEntry>
     </Entry>
  </Log>
</MLiveDataLog>

我像这样使用 ruby 和 Nokogiri :

require 'nokogiri'


    doc = Nokogiri::XML(File.open("test.xml"))
    puts doc.xpath("/MLiveDataLog/Log/Entry/@itemName")     

在"Log"元素下好像无法访问

您的部分输入文档位于 默认命名空间:

<Log xmlns="http://iec.ch/61400/ews/1.0/">

Log 元素及其所有后代元素都在该命名空间中,并且命名空间是这些元素标识的一部分。也就是说,Log{http://iec.ch/61400/ews/1.0/}Log 是非常不同的元素。

在 XPath 表达式中绝对需要考虑命名空间。在您的代码中,您需要将此命名空间与 prefix 一起声明 - 并为命名空间中的所有元素名称添加前缀。

Nokogiri 试图通过简单地提供帮助 redeclaring any namespace declarations found on the root of the document - 但是,如您所见,在您的情况下,声明不在最外层元素上。

require "nokogiri"

@doc = Nokogiri::XML(File.read("mlive.xml"))
puts @doc.xpath('/MLiveDataLog/iec:Log/iec:Entry/@itemName', 'iec' => 'http://iec.ch/61400/ews/1.0/')

结果将是

Turbine