เอกสาร XML เป็น String


104

วิธีที่ง่ายที่สุดในการรับการแสดงสตริงของเอกสาร XML ( org.w3c.dom.Document) คืออะไร นั่นคือโหนดทั้งหมดจะอยู่ในบรรทัดเดียว

ดังตัวอย่างจาก

<root>
  <a>trge</a>
  <b>156</b>
</root>

(นี่เป็นเพียงการแสดงต้นไม้ในรหัสของฉันมันเป็นorg.w3c.dom.Documentวัตถุดังนั้นฉันจึงไม่สามารถถือว่าเป็น String ได้)

ถึง

"<root> <a>trge</a> <b>156</b> </root>"

ขอบคุณ!



คำตอบ:


207

สมมติว่าdocเป็นตัวอย่างของorg.w3c.dom.Document:

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

12
replaceAllอาจจะไม่จำเป็นถ้าคุณเพิ่มคุณสมบัติเอาต์พุตอื่น:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
และwriter.getBuffer().toString()สามารถเป็นได้writer.toString()
bvdb

@bvdb คะแนนดีเยี่ยมทั้งคู่. มีข้อได้เปรียบพิเศษในการเพิ่มOutputKeys.INDENTบรรทัดอย่างชัดเจนเนื่องจากคุณสามารถตั้งค่า"yes"ให้เว้นช่องว่างได้ - หากนั่นคือสิ่งที่คุณต้องการ (ในสถานการณ์ของฉันฉันพบว่าการลบเพียงreplaceAllไม่ได้ผลเพื่อรวมช่องว่างใน สตริง)
Jonathan Benn

โปรดดูstackoverflow.com/questions/1384802/…สำหรับคำอธิบายวิธีทำให้การเยื้องทำงานอย่างถูกต้อง
Jonathan Benn

2

ใช้ Apache XMLSerializer

นี่คือตัวอย่าง: http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

คุณสามารถตรวจสอบสิ่งนี้ได้เช่นกัน

http://www.netomatix.com/XmlFileToString.aspx


Xerces ยังคงเป็นที่น่าขันไม่ได้แจกจ่ายอย่างเป็นทางการผ่าน Maven (จึงเป็นเรื่องที่น่าสนใจเช่นกัน) รวมถึงไม่มีแหล่งข้อมูลที่เชื่อถือได้หรือ JavaDocs, WTF! ไม่มีการสนับสนุน maven อย่างเป็นทางการทำให้การแก้ปัญหาการเลิกใช้งานยากขึ้นทำให้การอัปเดตที่สม่ำเสมอยุ่งยากมากขึ้นและก่อให้เกิดความเสี่ยงด้านความปลอดภัยดังนั้นจึงเป็นเรื่องโง่ที่จะต้องพึ่งพามันในตอนนี้!
Infernoz

1

ก่อนอื่นคุณต้องกำจัดอักขระขึ้นบรรทัดใหม่ทั้งหมดในโหนดข้อความทั้งหมดของคุณ จากนั้นคุณสามารถใช้การแปลงข้อมูลประจำตัวเพื่อส่งออกทรี DOM ของคุณ ดู javadoc สำหรับTransformerFactory#newTransformer().

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.