使用 vtd-xml 更新属性值
Update attribute value using vtd-xml
给定属性的 xpath 和新值,我希望将属性值更新为新值。
我按照这里的例子:http://vtd-xml.sourceforge.net/codeSample/cs7.html 得出以下结论:
autoPilot.selectXPath(xpath);
modifier.updateToken(vtdNav.getAttrVal(vtdNav.toString(autoPilot.evalXPath())), newContent);
...我的测试都通过了,但也许是因为我不习惯 vtd-xml 的 "tokenized" 工作方式,它 "feel" 不对,所以我只是想确认我做了正确的事情。
您的代码可以正常工作...假设您将调用 modifier.output()。
但这不是最优的...
此声明
modifier.updateToken(vtdNav.getAttrVal(vtdNav.toString(autoPilot.evalXPath())), newContent);
可以写成
modifier.updateToken(autoPilot.evalXPath()+1, newContent);
因为如果属性名称的索引值为 i (!=-1),则属性值始终为 i+1... 因为 attr val 紧跟在 attr 名称之后。不需要条件检查。
给定属性的 xpath 和新值,我希望将属性值更新为新值。
我按照这里的例子:http://vtd-xml.sourceforge.net/codeSample/cs7.html 得出以下结论:
autoPilot.selectXPath(xpath);
modifier.updateToken(vtdNav.getAttrVal(vtdNav.toString(autoPilot.evalXPath())), newContent);
...我的测试都通过了,但也许是因为我不习惯 vtd-xml 的 "tokenized" 工作方式,它 "feel" 不对,所以我只是想确认我做了正确的事情。
您的代码可以正常工作...假设您将调用 modifier.output()。
但这不是最优的...
此声明
modifier.updateToken(vtdNav.getAttrVal(vtdNav.toString(autoPilot.evalXPath())), newContent);
可以写成
modifier.updateToken(autoPilot.evalXPath()+1, newContent);
因为如果属性名称的索引值为 i (!=-1),则属性值始终为 i+1... 因为 attr val 紧跟在 attr 名称之后。不需要条件检查。