【问题标题】:What is the XPath to reach a attirbute value?达到属性值的 XPath 是什么?
【发布时间】:2019-07-01 07:39:30
【问题描述】:

我正在使用 VTD-XML : evalXPath() 来达到属性值并更新它。所以我需要如何到达属性的确切路径。我正在使用 attribute::name 来达到直到 name 属性,但是我如何从这里达到它的值?我试过 text() 和 data() 但它没有引导名称值的有效路径。

比如我的xml是

<person>
  <identity name='sam' age='23'> identified </identity>
</person>

我正在使用查询:

/person/attribute::name

它解析 XML 树以到达名称属性节点。但是我如何从这个节点获得属性的值呢?我想联系“山姆”。

【问题讨论】:

  • 我已经更新了
  • sam 是您想要的输出吗?
  • 如果我使用 /person/@name,我可以获得 sam 作为值。但是我使用 VTD-XML 来解析我的 xml,我必须到达“sam”节点本身来更新它。有没有其他方法可以达到它?
  • 你试过/person/nodes()吗?

标签: xml vtd-xml


【解决方案1】:

获取属性节点后,从evalXPath()中得到一个int,假设值是i,那么i+1就是属性值节点。你可以使用 i+1 并对它做很多事情,比如 将其转换为字符串或整数。

【讨论】:

  • 如果一个 xml 标签既包含一个属性又包含 xml 值,例如:带有查询的节点, /person/@name 它给出了 sam。但是,如果我 /person 获取字符串值 'identified' 它会返回名称。
  • 最终 AutoPilot ap = new AutoPilot(vtdNav); ap.selectXPath(路径);诠释 i = -1; /** 如果不存在新节点,则 evalXPath 返回 -1 / while ((i = ap.evalXPath()) != -1) { extractValues.add(vtdNav.toString(i+1)); } /* 重置 XPath */ ap.resetXPath();
  • i+1 仅用于属性名称/val,其他 i 是您要查找的内容
  • 如何区分运行时必须使用i还是i+1?
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多