return 树中包含字符串值的所有唯一元素的列表的 XPath

XPath to return a list of all unique elements in tree that contain a string value

我正在尝试设计一些 XPath,它将为我提供树中每个元素的列表,其中包含一些字符串值(任何值,只要它不为空),没有重复项。如果我可以 return 一个列表 object,我可以很容易地从中删除重复项。我正在尝试将一些 XML 序列化为 CSV,这是我能想到的构建 header 行的最佳方式...

谢谢!

决定依靠 Python 并尽可能避免使用 XPath,这很有效:

columns = list(set([x.tag for x in root.iter() if x.text is not None]))

XPath 1.0 解决方案:

name((//*)[i][text()[normalize-space()]]

其中 i 是要增加的值。

XML :

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
  <title lang="en">Everyday Italian</title>
  <year>Giada De Laurentis</year>
  <year>2005</year>
  <price>euros</price>
</book>
<book category="cooking">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentis</author>
  <year>2005</year>
  <price>euros</price>
  <colorcover>red</colorcover>
</book>
</bookstore>

R代码:

a=list()
i=1
for (j in 1:xpathSApply(p,"count(//*)")) {
  xpath=paste0('name((//*)[',i,'][text()[normalize-space()]])')  
  a[[i]]=xpathSApply(p,xpath)
  i=i+1}
a=unlist(unique(a[-which(a=="")]))

输出:

"title"      "year"       "price"      "author"     "colorcover"