肥皂java:读取和更改xml文件中的节点

肥皂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样式表,并将用户提供的值作为参数传入。
+0

我最终从头开始生成xml。 – alex 2010-10-29 13:07:28

您可以使用castor并从对象中创建xml和xml中的对象。

+0

有趣的建议。我以前从来没有听说过Castor,所以我会去看看 – alex 2010-10-29 13:05:49

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

    }