ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[java] สอบถามเกี่ยวกับการเขียนโปรแกรมให้ดึงค่าใน txt file ตามที่ต้องการ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [java] สอบถามเกี่ยวกับการเขียนโปรแกรมให้ดึงค่าใน txt file ตามที่ต้องการ  (อ่าน 1150 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
wch2013
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 106



ดูรายละเอียด
« เมื่อ: 10 มิถุนายน 2013, 23:31:58 »

ถ้า log file ผมเก็บข้อมูลในลักษณะแบบนี้ (ดึงมา 3 transaction)

โค๊ด:
20130402-03:27:02.574 : 49=CLIENT156=EXECUTOR1212=255213=<XML>
                    <OrderID>201304020000<OrderID>
                    <Account>11111<Account>
                    <Qty>100.00</Qty>
                    <Price>45.55</Price>
                  </XML>10=075
20130402-03:27:02.574 : 49=CLIENT156=EXECUTOR1212=255213=<Response>confirm Order from account 11111 : 1 BBL, Price:45.55 , Qty:100 </Response>10=075
20130402-03:27:02.574 : 49=CLIENT156=EXECUTOR1212=255213=<XML>
                    <OrderID>201304020000<OrderID>
                    <Account>11111<Account>
                    <Qty>100.00</Qty>
                    <Price>45.55</Price>
                  </XML>10=075

ถ้าผมต้องการดึงข้อมูลที่เป็น xml data ตามด้านล่าง
โค๊ด:
<XML>
                    <OrderID>201304020000<OrderID>
                    <Account>11111<Account>
                    <Qty>100.00</Qty>
                    <Price>45.55</Price>
                  </XML>

หรือ
โค๊ด:
<Response>confirm Order from account 11111 : 1 BBL, Price:45.55 , Qty:100 </Response>

เลยมาขอคำแนะนำว่า ผมจะเขียนโปรแกรม java ยังไงให้ get หรือดึงค่าเฉพาะที่เป็น xml data มาเก็บไว้ใน array ตามด้านบนได้บ้างครับ ใช้พวก indexOf, split, substring นี่โอเคไหมครับ หรือว่ามี function ที่สามารถ match ได้เลยว่ส่วนนี้เป็น xml data แล้วดึงออกมา

ขอบคุณมากครับ
« แก้ไขครั้งสุดท้าย: 10 มิถุนายน 2013, 23:38:58 โดย wch2013 » บันทึกการเข้า
Maxio
ก๊วนเสียว
*

พลังน้ำใจ: 49
ออฟไลน์ ออฟไลน์

กระทู้: 275



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 11 มิถุนายน 2013, 03:05:37 »

ดึงได้ครับ ที่อยู่ภายในแท็ก <XML>...</XML>
แต่ถ้าแท็ก<OrderID> ไม่มีแท็กปิด </OrderId> มันก็จะไม่เป็น xml format นะครับ

ใช้พวก SAX, DOM, JDOM อะครับ ส่วนตัวผมไม่ค่อยได้ใช้ xmlนะครับ ใช้แต่ JSON ซะส่วนใหญ่

ลองดูเว็บนี้เป็นตัวอย่างครับ http://www.mkyong.com/tutorials/java-xml-tutorials/

โค๊ด:
public class ReadXML {

public static void main(String argv[]) {
try {
String xml
= "<XML>" +
"<OrderID>201304020000</OrderID>" +
"<Account>11111</Account>" +
"<Qty>100.00</Qty>" +
"<Price>45.55</Price>" +
"</XML>";

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));

Document doc = builder.parse(is);

doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("XML");

int length = nodeList.getLength();

for (int i = 0; i < length; i++) {

Node node = nodeList.item(i);

if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("OrderID : " + element.getElementsByTagName("OrderID").item(0).getTextContent());
System.out.println("Accout : " + element.getElementsByTagName("Account").item(0).getTextContent());
System.out.println("Qty : " + element.getElementsByTagName("Qty").item(0).getTextContent());
System.out.println("Price : " + element.getElementsByTagName("Price").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
เอาท์พุต
โค๊ด:
Root :XML
OrderID : 201304020000
Accout : 11111
Qty : 100.00
Price : 45.55

แต่ถ้าคุณ มี xml ต่อๆกัน เช่น
โค๊ด:
String xml
= "<XML>" +
"<OrderID>201304020000</OrderID>" +
"<Account>11111</Account>" +
"<Qty>100.00</Qty>" +
"<Price>45.55</Price>" +
 "</XML>"+
 "<XML>" +
"<OrderID>201304020000</OrderID>" +
"<Account>11111</Account>" +
"<Qty>100.00</Qty>" +
"<Price>45.55</Price>" +
 "</XML>";

ก็จะเกิด error เพราะตอนนี้มันมี root element (XML) ถึงสองตัว  โดยปกติแล้ว xml อนุญาตให้มีแค่ 1 root element
ต้องทำการเพิ่ม element ครอบไปทั้ง XMLทั้งหมดเลยครับ เช่น
โค๊ด:
<root>
<XML>....</XML>
<XML>...</XML>
</root>
ครับ
บันทึกการเข้า

MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #2 เมื่อ: 11 มิถุนายน 2013, 13:15:29 »

จากที่ผมดู ใช้ regex ปรับแต่ง log ซะหน่อย เพราะข้อมูลบางตัวมันก็ไม่อยู่ใน element ก็ตัดออกให้มันได้ format ตามที่เราต้องการ

แล้วถ้าเป็นผม ผมก็จะไม่ดึง xml ตรงๆ เพราะขี้เกียจ + มันดูยาก
แน่นอน xml มันมีรูปแบบอยู่แล้ว

ถ้าเป็นไปได้ ผมก็ไปสร้าง class มาให้รูปแบบมันตรง (ถ้ามันไม่คอ่ยตรงก็ regex ปรับให้มันตรงซะ 55+)
แล้วใช้ jaxb แปลง xml to object

พอจะ get ค่า ก็ใช้ object.getter() เอา

ประมาณนี้
« แก้ไขครั้งสุดท้าย: 11 มิถุนายน 2013, 13:15:58 โดย MapTwoZa » บันทึกการเข้า

Good code quality Developer Cheesy
หน้า: [1]   ขึ้นบน
พิมพ์