使用&<&燃气轮机&引用';通过javadom解析器
再见,ppl 我有课:使用&<&燃气轮机&引用';通过javadom解析器,java,xml,parsing,dom,Java,Xml,Parsing,Dom,再见,ppl 我有课: public class XmlModifier { private DocumentBuilderFactory docFactory = null; private DocumentBuilder docBuilder = null; private Document document = null; private TransformerFactory transformFactory = null; private Tra
public class XmlModifier {
private DocumentBuilderFactory docFactory = null;
private DocumentBuilder docBuilder = null;
private Document document = null;
private TransformerFactory transformFactory = null;
private Transformer transform = null;
private DOMSource source = null;
private StreamResult streamRes = null;
private boolean exepDocBuilderAlarm = true;
public XmlModifier() {
this.docFactory = DocumentBuilderFactory.newInstance();
try {
this.docBuilder = docFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
this.exepDocBuilderAlarm = false;
e.printStackTrace();
}
}
public void prepareXMLMessage(File file, String userName, String userPassword, String reqId, Integer NUMBER_OF_MSG_SENDS) {
if (exepDocBuilderAlarm != false) {
try {
document = docBuilder.parse(file);
setElementValues("si:sourceInfo", addElementsToArray("si:reqId,si:reqTag"), addElementsToArray(reqId + "," + reqId), NUMBER_OF_MSG_SENDS);
setElementValues("usr:user", addElementsToArray("usr:id,usr:password"), addElementsToArray(userName + "," + userPassword), NUMBER_OF_MSG_SENDS);
setElementValues("meth:method", addElementsToArray("meth:id,meth:tag"), addElementsToArray(reqId + "," + reqId), NUMBER_OF_MSG_SENDS);
setElementValues("tb:tradeField", addElementsToArray("tb:value"), addElementsToArray(reqId), NUMBER_OF_MSG_SENDS);
this.transformFactory = TransformerFactory.newInstance();
this.transform = transformFactory.newTransformer();
this.source = new DOMSource(document);
this.streamRes = new StreamResult(file);
this.transform.transform(source, streamRes);
System.out.println("Done to execute XmlModifier");
} catch (Exception e) {
e.printStackTrace();
} finally {
this.docFactory = null;
this.docBuilder = null;
this.transformFactory = null;
this.transform = null;
this.source = null;
this.streamRes = null;
}
}
}
private void setElementValues(String rootElement, String[] childElements, String[] childElementsValues, Integer msgIDIncrement) {
Node nodeRootElement = document.getElementsByTagName(rootElement).item(0);
NodeList childElementlist = nodeRootElement.getChildNodes();
for (int i = 0; i < childElements.length; i++) {
for (int z = 0; z < childElementlist.getLength(); z++) {
Node node = childElementlist.item(z);
if (childElements[i].equals(node.getNodeName())) {
node.setTextContent(childElementsValues[i]);
}
}
}
}
private String[] addElementsToArray(String elements) {
String[] theArray = null;
theArray = elements.split(",");
return theArray;
}
}
公共类XmlModifier{
私有DocumentBuilderFactory docFactory=null;
私有文档生成器docBuilder=null;
私有文档=空;
私有TransformerFactory transformFactory=null;
专用变压器变换=null;
私有DOMSource=null;
私有StreamResult streamRes=null;
私有布尔值ExepDocBuilderArm=true;
公共XmlModifier(){
this.docFactory=DocumentBuilderFactory.newInstance();
试一试{
this.docBuilder=docFactory.newDocumentBuilder();
}捕获(ParserConfiguration异常e){
this.exepodobuilderarm=false;
e、 printStackTrace();
}
}
public void prepareXMLMessage(文件文件文件、字符串用户名、字符串用户密码、字符串请求ID、发送消息的整数){
如果(EXEPDOCBuilderArm!=假){
试一试{
document=docBuilder.parse(文件);
setElementValues(“si:sourceInfo”、addElementsToArray(“si:reqId,si:reqTag”)、addElementsToArray(reqId+”、“+reqId”)、发送消息的数量;
setElementValues(“usr:user”、addElementsToArray(“usr:id,usr:password”)、addElementsToArray(userName+”、“+userPassword”)、发送消息的数量;
setElementValues(“meth:method”,addElementsToArray(“meth:id,meth:tag”),addElementsToArray(reqId+”,“+reqId),发送消息的数量;
setElementValues(“tb:tradeField”、addElementsToArray(“tb:value”)、addElementsToArray(reqId)、消息发送的数量;
this.transformFactory=TransformerFactory.newInstance();
this.transform=transformFactory.newTransformer();
this.source=新的DOMSource(文档);
this.streamRes=新的StreamResult(文件);
this.transform.transform(source,streamRes);
System.out.println(“完成以执行XmlModifier”);
}捕获(例外e){
e、 printStackTrace();
}最后{
this.docFactory=null;
this.docBuilder=null;
this.transformFactory=null;
this.transform=null;
this.source=null;
this.streamRes=null;
}
}
}
私有void setElementValues(字符串rootElement、字符串[]childElements、字符串[]childElementsValues、整数msgIDIncrement){
节点NodeRooteElement=document.getElementsByTagName(rootElement).item(0);
NodeList childElementlist=NodeRooteElement.getChildNodes();
for(int i=0;i
在输入时,我使用的xml有时格式不好。DOM解析器的问题是,在我看来,DOM解析器从具有特殊符号(如<>&“
)的数据中解析整个xml对我来说并不好
如何在输入到prepareXMLMessage(..)
时为xml提供<>&“
”,然后在prepareXMLMessage(..)中毫无问题地解析它(更改元素中的一些值),并在输出时为xml返回<>&“
谢谢你的帮助。你试过了吗?这是一个很常见的问题。