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
我卡在 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