使用Java代码将文本插入到由XPath表达式定位的XML节点中
我有这样一个xml文档:使用Java代码将文本插入到由XPath表达式定位的XML节点中,java,xml,xpath,expression,structure,Java,Xml,Xpath,Expression,Structure,我有这样一个xml文档: <?xml version="1.0" encoding="UTF-8"?> <body> <request> <location> <address /> </location> </request> </body> 我的目标是在本文档中插入值“我的地址”,以便: <?xml version="1.0" encoding="UTF-8"?> <
<?xml version="1.0" encoding="UTF-8"?>
<body>
<request>
<location>
<address />
</location>
</request>
</body>
我的目标是在本文档中插入值“我的地址”,以便:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<request>
<location>
<address>
My Address
</address>
</location>
</request>
</body>
我的地址
我必须在一个java类中实现这一目标,该类必须创建一个从XML文件读取的文档(ok),并且我有一个XPath表达式(/request/location/address),它指示我将文本放在哪里(“我的地址”)。如何实现一个Java类,允许我从xml和XPath字符串开始,将文本插入到节点中?这个java类必须是通用的,而不是绑定到特定的XML结构(这就是为什么我使用XPath表达式而不是将XML结构放入类中的原因)。我希望我的问题很清楚。以下是执行此操作的代码
XPath
/request/location/address
根本不会选择文档中的任何内容,因为您的根元素是body
,而不是request
。至于Java代码和XPath,请参阅如何选择节点。是的,我在编写XPath时犯了错误,谢谢。我不知道如何使用正确的XPath表达式在该位置插入文本。我自己也用JDOM2解决了这个问题,但这也是一个非常有用的方法。当我有时间写我的方式时,我会用我的个人答案更新这篇文章。无论如何,谢谢您,vtd.xml-author.JDOM是最慢、最浪费资源的api之一,这就是证据
import com.ximpleware.*;
public class insertTextNode {
public static void main(String[] s) throws VTDException, Exception {
VTDGen vg = new VTDGen();
AutoPilot ap = new AutoPilot();
XMLModifier xm = new XMLModifier();
if (vg.parseFile("input.xml", true)) {
VTDNav vn = vg.getNav();
ap.bind(vn);
xm.bind(vn);
ap.selectXPath("/body/request/location/address");
int i=0;
while((i=ap.evalXPath())!=-1){
xm.insertAfterHead("myAddress");
}
xm.output("output.xml");
}
}
}