我正在尝试编写一个 xpath 表达式来根据某些标准从 xml 中获取元素名称。
iam 之后的事情是获取具有子节点“fields/enable”的每个元素的元素名称列表。我不知道元素的名称是什么,我没有任何属性可以触发,元素可以是任何 xml 可接受的名称。
在下面的示例中,我对以下结果感兴趣:
ajob
bjob
cjob
我设法为我感兴趣的每个节点设置了标签名称。在这个例子中,标签名称与我想要的元素名称完全相同,但我不能相信标签不会改变。我唯一确定的是元素名称。
->xpath("//wrapper/groups/*/fields/enable/../../label");
我对此进行了谷歌搜索,并通过使用 if name() 的不同组合获得了几次点击。我从来没有设法让 name() 返回任何值。
->xpath("//wrapper/groups/*/fields//enable/../name(parent::*)");
或者
->xpath("name(//wrapper/groups/*/fields/enable/../..)");
我已经简化了下面的 XML 示例,但基本结构和感兴趣的元素仍然存在
我会感谢我能得到的任何帮助。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<wrapper>
<groups>
<ainfo>
<label>Information</label>
</ainfo>
<atimer>
<label>Schedule</label>
<fields>
<time />
<frequency />
</fields>
</atimer>
<ajob>
<label>ajob</label>
<fields>
<enable>1</enable>
</fields>
</ajob>
<btimer>
<label>Schedule</label>
<fields>
<time />
<frequency />
</fields>
</btimer>
<bjob>
<label>bjob</label>
<fields>
<enable>1</enable>
</fields>
</bjob>
<cinfo>
<label>Information</label>
</cinfo>
<cjob>
<label>cjob</label>
<fields>
<enable>1</enable>
</fields>
</cjob>
</groups>
</wrapper>
</config>