肥皂java:读取和更改xml文件中的节点
问题描述:
我有许多预先生成的包含soap请求的静态xml文件。我可以阅读它们,发送请求,然后从服务器回来并回答。我想获得关于如何创建一个动态的过程中的一些建议:肥皂java:读取和更改xml文件中的节点
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProject xmlns="http://myserver/">
<atr1>string</atr1>
<atr2>string</atr2>
</getProject>
</soap:Body>
</soap:Envelope>
所以,我希望能够读取这些XML文件,修改节点等实际值的值从用户收集在运行时输入。最好的方法是:逐行读取xml文件并使用正则表达式替换值,或者制作xml文件的临时副本,使用sax替换节点值,然后发送新的xml,或者完全丢弃预先生成的xml文件,而是直接创建它们,或者如何?任何建议,将不胜感激。
答
- 使用正则表达式将是脆弱的,因为XML的格式可以在你不希望的方式改变,仍然是良好和有效的XML,但不适合你的正则表达式。通常不推荐使用正则表达式来解析XML。
- 使用SAX读取XML文件(为什么创建临时副本?),将所有节点复制到输出,修改某些节点以放入用户提供的值。这听起来像一个好的,可行的解决方案。
- 从零开始创建XML:如果事先知道它们的结构,那听起来会更简单,并且它不是太大。一种方法是使用XSLT样式表,并将用户提供的值作为参数传入。
答
XStream也可以用在这个过程中我也在做一些同样的事情。如果你喜欢,你也可以试试XStream。
答
private void changeTagData(List<String> tagNameList, SOAPBody body) {
for(String tagName : tagNameList){
NodeList nodeList = body.getElementsByTagName(tagName);
int length = nodeList.getLength();
Node node;
for (int i = 0; i < length; i++) {
node = (Node) nodeList.item(i);
node.setTextContent("change tag data");
}
}
}
我最终从头开始生成xml。 – alex 2010-10-29 13:07:28