XML::LibXML findnodes 未返回任何匹配的节点
我有一个没有命名空间的简单 XML。
我正在使用 XML::LibXML::Reader 来解析 XML。当我得到匹配的元素时,我就完成了搜索。据我了解,该元素的类型为 XML::LibXML::Element。 (我在继续使用 XML::LibXML::Reader 时有一定的限制)
当我尝试将 findnodes 与 xpath 一起使用时,它不起作用。 这是代码
my $libXMLPattern = XML::LibXML::Pattern->new('widget');
my $element;
my $reader = XML::LibXML::Reader->new(string => $xml);
$reader->nextElement();
while ($reader->nextPatternMatch($libXMLPattern))
{
next if ($reader->nodeType == XML_READER_TYPE_END_ELEMENT);
$element = $reader->copyCurrentNode(1);
last;
}
$reader->finish();
my $xPathExp = '//component';
my @nodes = $element->findnodes ($xPathExp);
这是 XML
<widget name="a" type="b">
<component type="C">
<component type="ca"/>
<component type="cb"/>
</component>
</widget>
<window>
...
</window>
请帮助我我做错了什么?
I have a simple XML without namespace.
I am using XML::LibXML::Reader to parse the XML. When I get the matched Element, I finish the search. As I understand this element is of type XML::LibXML::Element.
(I have certain limitation to continue with XML::LibXML::Reader)
When I am trying to use findnodes with xpath, it's not working.
Here is the code
my $libXMLPattern = XML::LibXML::Pattern->new('widget');
my $element;
my $reader = XML::LibXML::Reader->new(string => $xml);
$reader->nextElement();
while ($reader->nextPatternMatch($libXMLPattern))
{
next if ($reader->nodeType == XML_READER_TYPE_END_ELEMENT);
$element = $reader->copyCurrentNode(1);
last;
}
$reader->finish();
my $xPathExp = '//component';
my @nodes = $element->findnodes ($xPathExp);
Here is the XML
<widget name="a" type="b">
<component type="C">
<component type="ca"/>
<component type="cb"/>
</component>
</widget>
<window>
...
</window>
Please help me what wrong I am doing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
输出:
关键是
//component
与.//component
。是
Well,该元素不存在于文档中的缩写,因此没有
/
可以开始。另一方面,是 短
是 长 是
该路径是相对于现有节点的,因此可以对其进行处理。
下次,请提供演示该问题的最小和可运行代码。
Output:
The key is
//component
vs.//component
.is short for
Well, the element doesn't exist in a document, so there's no
/
to start from. On the other hand,is short for
which is long for
That path is relative to an existing node, so it can be processed.
Next time, please provided the minimal and runnable piece of code that demonstrates the problem.