ช่วงนี้ก็กลับมาทำ Thesis แล้วครับ หลังจากที่ได้ทำงานอย่างหนัก เพื่อลูกค้าไปจนดึกดื่นครับ โดยในปัญหาที่ผมเจอ คือ ต้องการ Update ค่าใน XML ครับ โดยมีตัวอย่างของ XML ที่ต้องการแก้ไขค่า ดังนี้ครับ
ก่อนแก้ไข
<bpmn:sequenceFlow id="SequenceFlow_1527j5i" name="else" sourceRef="ExclusiveGateway_0xrpnpu" targetRef="Reject_Loan_Request"> <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${!(collateralAmt / loanAmt*100 > 70)}]]></bpmn:conditionExpression> </bpmn:sequenceFlow>
หลังแก้ไข
<bpmn:sequenceFlow id="SequenceFlow_1527j5i" name="else" sourceRef="ExclusiveGateway_0xrpnpu" targetRef="Reject_Loan_Request"> <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${!(collateralAmt + loanAmt*100 > 70)}]]></bpmn:conditionExpression> </bpmn:sequenceFlow>
จากรูปเห็นว่าค่าใน XML Node ที่ผมต้องการแก้ไขมันมีอักขระพิเศษอย่าง
<![CDATA[ --ข้อมูลที่ต้องการแสดงผล-- >
สำหรับเจ้า CDATA มันมีชื่อเต็ม คือ Character Data ครับ จุดประสงค์ของมันก็ตรงตัวเลยครับ ยัดอะไรเข้ามาใช้ XML ก็ต้องเก็บตามที่ยัดครับ ไม่เว้นพวกอักขระพิเศษ ตามตารางด้านล่างเลยครับ
สิ่งที่ XML เก็บ | สัญลักษณ์ที่แสดง |
< ; | < |
> ; | > |
&le ; | <= |
&ge ; | >= |
มาดูดีกว่า Java มีการจัดการสำหรับการแก้ไขค่า CDATA บน Node ที่สนใจ ถ้าภาษา XML พื้นที่ตรงนี้จะเรียกว่า Text Node ครับ เอ้ามาดู Code กันเลยครับ
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new File(pMutantTestItem.getBPMNSoureFilePath())); doc.setXmlStandalone(true); //เอาไว้แก้ปัญหาตอนเขียนไฟล์ที่ java ชอบใส่ Standalone doc.getDocumentElement().normalize(); //ค้นหา BPMN NodeList nList = doc.getElementsByTagName("bpmn:conditionExpression"); for (int i = 0; i < nList.getLength(); i++) { Node n = nList.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) n; //สร้าง CDATA ขึ้นมาครับ CDATASection mutantCData = doc.createCDATASection(mutant.getMutantStatement()); //elem.getFirstChild() => ถ้ามี Tag ข้างใน มันจะเอาค่าของ Tag มาแทนครับ Text Node elem.replaceChild(mutantCData, elem.getFirstChild()); } }
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.