Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java代码将文本插入到由XPath表达式定位的XML节点中_Java_Xml_Xpath_Expression_Structure - Fatal编程技术网

使用Java代码将文本插入到由XPath表达式定位的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文档:

<?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");
        }
    }
}