วิธีสร้างเอกสาร XML ตัวอย่างจาก DTD หรือ XSD ของพวกเขา


186

เรากำลังพัฒนาแอปพลิเคชั่นที่เกี่ยวข้องกับการแปลง XML จำนวนมาก เราไม่มีข้อมูลทดสอบอินพุตที่เหมาะสมต่อไฟล์เฉพาะไฟล์ DTD หรือ XSD เราต้องการสร้างข้อมูลทดสอบของเราเองจากไฟล์เหล่านี้ มีวิธีง่าย ๆ / ฟรีที่จะทำเช่นนั้น?

แก้ไข

เห็นได้ชัดว่าไม่มีเครื่องมือฟรีสำหรับเรื่องนี้และฉันยอมรับว่า OxygenXML เป็นหนึ่งในเครื่องมือที่ดีที่สุดสำหรับสิ่งนี้


8
ฉันไม่เห็นคำตอบสำหรับคำถามนี้ที่ไม่ตรงกับรูปแบบคำถามและคำตอบdebate, arguments, polling, or extended discussion
mjn

คำตอบ:


29

ฉันคิดว่า Oxygen ( http://www.oxygenxml.com/ ) ทำได้ดีเช่นกัน แต่นั่นเป็นผลิตภัณฑ์เชิงพาณิชย์อีกชิ้น มันเป็นสิ่งที่ดี แต่ฉันขอแนะนำอย่างยิ่งให้กับทุกคนที่ทำงาน XML เป็นจำนวนมาก มันมาในปลั๊กอิน Eclipse ที่ดีเช่นกัน

ฉันเชื่อว่ามีการทดลองใช้ฟรี 30 วันอย่างเต็มรูปแบบ


ฉันมี XSD หลายอันซึ่งสืบทอด schema จาก XSD ที่แตกต่างกันและฉันจำเป็นต้องสร้างไฟล์ XML สำหรับการทดสอบจาก XSD นี้ฉันใช้ oxygenXML เพื่อทำสิ่งนี้ แต่เมื่อฉันลองทำมันไม่ทำงานสำหรับฉันและ มันบอกว่าโปรดกำหนดรูตโหนด แต่มันไม่อนุญาตให้ฉันทำเช่นนั้น ดังนั้นหากใครเคยทำงานกับ oxygenXML จะแนะนำว่าอะไรจะเกิดขึ้นกับสิ่งนี้
Rachel

ขอบคุณระดับและ นี่ตอบคำถามของฉันด้วย! หากคุณต้องการที่จะตอบคำถามของฉัน: stackoverflow.com/questions/7041388/ ......ฉันยินดีที่จะทำเครื่องหมายคำถามของคุณเป็นคำตอบ
Eric H

179

ใน Visual Studio 2008 SP1 และใหม่กว่าXML Schema Explorerสามารถสร้างเอกสาร XML ด้วยข้อมูลตัวอย่างพื้นฐานบางอย่าง:

  1. เปิดเอกสาร XSD ของคุณ
  2. เปลี่ยนเป็น XML Schema Explorer
  3. คลิกขวาที่รูทโหนดและเลือก "สร้างตัวอย่าง Xml"

สกรีนช็อตของ XML Schema Explorer


15
ใช่นี่เป็นวิธีที่ง่ายที่สุด เปิด XSD เปลี่ยนเป็น XML Schema Explorer เลือกโหนดรูทคลิกขวาแล้วเลือก "Generate Sample Xml"
balint

+1 ขอบคุณ @Sam Warwick และ @balint มันมีประโยชน์จริง ๆ !
jessegavin

3
ฉันใช้สิ่งนี้กับ VS2008 แต่ฉันไม่พบสิ่งนี้ใน VS2010 มีใครยืนยันได้ไหมว่าสิ่งนี้ยังคงมีอยู่?
Simon

เหมือนกับ Simon: ฉันไม่พบสิ่งนี้ใน VS2010 เช่นกัน ตาม MSDN มันควรจะอยู่ที่นั่น แต่มันจะไม่ปรากฏขึ้นที่ใดก็ได้ใน UI ... :-(
Martijn

6
@Simon: คุณจะได้รับ "สร้าง XML ตัวอย่างเท่านั้น" เมื่อคุณคลิกขวาที่องค์ประกอบหนึ่งใน schema explorer องค์ประกอบต่างๆจะแสดงเป็นภาพกราฟิกผ่านวงเล็บมุมสีเขียวซ้าย / ขวา: "<>" คุณอาจคลิกขวาที่ประเภทและข้อความสร้างจะสร้างขึ้นเฉพาะสำหรับองค์ประกอบ (ซึ่งเหมาะสม)
Miguel Sevilla

126

ในเวอร์ชันล่าสุดของEclipse IDE แบบอิสระและโอเพนซอร์สคุณสามารถสร้างเอกสาร XML จากไฟล์ DTD และ XSD คลิกขวาที่ไฟล์ * .dtd หรือ * .xsd ที่ระบุและเลือก "สร้าง -> ไฟล์ XML ... " คุณสามารถเลือกองค์ประกอบหลักที่จะสร้างและกำหนดว่าจะสร้างแอตทริบิวต์และองค์ประกอบเพิ่มเติมหรือไม่

แน่นอนคุณสามารถใช้ Eclipse เพื่อสร้างและแก้ไขไฟล์สคีมา DTD และ XSD ของคุณได้เช่นกัน และคุณไม่จำเป็นต้องติดตั้งปลั๊กอินใด ๆ มันรวมอยู่ในการกระจายมาตรฐาน


ขอบคุณ! Eclipse นั้นฟรีและนี่คือทางออกที่สมบูรณ์แบบ
Akku

พวกคุณรู้หรือไม่ว่าฟีเจอร์ Eclipse นำเสนอฟังก์ชันนี้หรือไม่ เมนูย่อย "สร้าง" ของฉันมี "JAXB Classes" เป็นรายการเดียว
otto.poellath

9
คุณต้องติดตั้งโครงการเครื่องมือเว็บ (ดูที่วิธีใช้ -> ติดตั้งซอฟต์แวร์ใหม่) เพื่อรับตัวเลือกเหล่านี้
pwaring

3
Eclipse ดูเหมือนเป็นตัวเลือกที่ดี แต่ฉันไม่สามารถรับรุ่นเพื่อติดตาม XSD ที่นำเข้าได้ ตัวอย่างเช่นถ้าฉันมี XSD ที่อธิบายองค์ประกอบ 3 อย่างและหนึ่งในนั้นคือ complexType ที่กำหนดไว้ใน XSD อ้างอิง / นำเข้ามันจะไม่สร้างองค์ประกอบนั้นขึ้นมา ความคิดใด ๆ
David Hergert

@DavidHergert วิธีแก้ปัญหาง่ายๆจะสร้างประเภทต้นขั้ว
Adam Matan

32

สำหรับผู้ใช้ Intellij Idea:

ดูที่เครื่องมือ -> การกระทำของ XML

ป้อนคำอธิบายรูปภาพที่นี่

ดูเหมือนว่าจะทำงานได้ดีมาก (เท่าที่ฉันได้ทดสอบ)

แก้ไข:

ตามที่กล่าวถึงโดย @naXa คุณสามารถคลิกขวาที่ไฟล์ XSD แล้วคลิก "สร้างเอกสาร XML จาก XSD Schema ... "


มีวิธีการระบุ # ขององค์ประกอบที่จะสร้าง (สำหรับลำดับ)?
Nikita

ฉันทดสอบทุกวิธีของเธรดนี้และวิธีนี้ใช้งานได้ดีที่สุด
FLX

1
ไม่ทำงานสำหรับฉันใน RubyMine ล่าสุด (เวอร์ชัน 7.0, Intellij Idea ที่ใช้) กับ XSD ที่มีการนำเข้ามากมาย ฉันไม่มีอะไรนอกจากข้อผิดพลาด
Envek

3
"ข้อผิดพลาดในการรวบรวม Schema"?
ถั่วแดง

1
ในเวอร์ชันที่ใหม่กว่าให้คลิกขวาที่ XSD แล้วเลือก "สร้างเอกสาร XML จาก XSD Schema ... "
naXa

12

Camprocessor ที่มีอยู่บน Sourceforge.net จะทำการสร้างตัวทดสอบ xml สำหรับ XSD ใด ๆ มีการสอนเพื่อแสดงวิธีสร้างตัวอย่างการทดสอบของคุณเอง - รวมถึงการใช้คำแนะนำเนื้อหาเพื่อให้แน่ใจว่าเป็นตัวอย่างจริงไม่ใช่แค่ขยะแบบสุ่ม

บทช่วยสอนมีอยู่ที่นี่: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

และข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือ - ซึ่งใช้มาตรฐาน OASIS Content Assembly Mechanism (CAM) เพื่อปรับโครงสร้าง XSD ของคุณให้เป็นโครงสร้าง XSLT ที่เป็นมิตรมากขึ้นสามารถพบได้จากเว็บไซต์ทรัพยากร - http://www.jcam.org.uk

สนุกไปกับ DW


3
ลิงก์โดยตรงไปยังการดาวน์โหลด Sourceforge.net คือ: sourceforge.net/projects/camprocessor

@Pyderman - นั่นคือการตั้งค่าของคุณ - ดูวิธีการเปลี่ยนพวกเขา
Ghoti

10

คุณสามารถใช้อินสแตนซ์ Generator XML ซึ่งเป็นส่วนหนึ่งของดวงอาทิตย์ / ออราเคิล Multi-Schema ตรวจสอบ

มันเป็นสถานะ README.txt:

Sun XML Generator เป็นเครื่องมือ Java เพื่อสร้างอินสแตนซ์ XML ที่หลากหลายจากสกีมาหลายประเภท รองรับ DTD, RELAX Namespace, RELAX Core, TREX และเซ็ตย่อยของ W3C XML Schema ตอนที่ 1 [... ]

นี่เป็นเครื่องมือบรรทัดคำสั่งที่สามารถสร้างทั้งอินสแตนซ์ที่ถูกต้องและไม่ถูกต้องจากสคีมา มันสามารถใช้สำหรับการสร้างกรณีทดสอบสำหรับการใช้งาน XML ที่จำเป็นต้องสอดคล้องกับสคีมาโดยเฉพาะ

ดาวน์โหลดและแกะxmlgen.zipออกจากหน้าดาวน์โหลด msvและเรียกใช้คำสั่งต่อไปนี้เพื่อรับคำแนะนำการใช้งานโดยละเอียด:

java -jar xmlgen.jar -help

เครื่องมือนี้ปรากฏว่ามีการเผยแพร่ภายใต้ใบอนุญาต BSD ซอร์สโค้ดสามารถเข้าถึงได้จากที่นี่


ดีมาก! มีข้อ จำกัด เล็กน้อย ฉันลองใช้ XSD ที่นำเข้า XSD อื่นและล้มเหลว แต่สำหรับ DTD มันใช้งานได้ดีมาก ขอบคุณ!
lindelof

1
การเชื่อมโยงที่ปัจจุบัน: หน้าแรก , การดาวน์โหลด xmlgen.zipเฉพาะในnigthlyไดเรกทอรี ฉันยืนยันการไม่สามารถสร้างตัวอย่างจาก xsd ของฉัน
Jarekczek

ในกรณีของฉันจำเป็นต้องใช้--exampleไฟล์เพื่อมีโทเค็นที่สามารถใช้ในการสร้างไฟล์ตัวอย่างใหม่ ต้องใช้ตัวอย่างเพื่อทำตัวอย่าง! ไม่ใช่เรื่องง่าย ...
Red Pea

ลิงก์ java.net นั้นตายแล้ว
RedGrittyBrick

10

XMLSpyทำเพื่อคุณแม้ว่าจะไม่ฟรี ...

ฉันเชื่อว่าLiquid Xml Studioทำเพื่อคุณและให้บริการฟรี แต่ฉันไม่ได้ใช้เพื่อสร้างข้อมูลทดสอบ


มันสร้างบางสิ่งบางอย่าง แต่คุณไม่ได้มีการควบคุมมากมากกว่านั้นคุณสามารถเลือกองค์ประกอบระดับบนสุดและบางตัวเลือกทั่วไป แต่คุณไม่สามารถใช้ XMLSpy เพื่อสร้างชุดของ testcases กับหลายสายพันธุ์อื่น ๆ
ฮันส์ปีเตอร์สตอร์

XMLSpy ดูดี แต่สร้าง xml ซึ่งไม่สามารถตรวจสอบกับ xsd ที่ใช้สร้างมันได้ ล้มเหลว. นอกจากนี้ยังถูกขังอยู่ในpostiveintegerสนาม - วาง*ERROR*แทน
ทิมอาเบล

7

ดูเหมือนว่าไม่มีใครสามารถตอบคำถามได้ :)

ฉันใช้ MOXy ของ EclipseLink เพื่อสร้างคลาสการเชื่อมโยงแบบไดนามิกและจากนั้นจะทำซ้ำผ่านประเภทที่ถูกผูกไว้ มันค่อนข้างหนัก แต่อนุญาตให้ฉีดค่า XPath ได้เมื่อต้นไม้วัตถุถูกสร้างอินสแตนซ์:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps เป็นวิธีการเรียกซ้ำง่าย ๆ :

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

การแปลงทุกอย่างเป็น XML นั้นค่อนข้างง่าย:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

7

คุณยังสามารถใช้ XMLPad (ใช้งานฟรี) ได้ที่นี่http://www.wmhelp.com เพื่อสร้างตัวอย่าง XML ของคุณ จากเมนู: XSD -> สร้างไฟล์ XML ตัวอย่าง


ฉันได้รับสแต็คมากเกินไปหรือ "WMHelp XmlPad หยุดทำงาน" เมื่อฉันเลือก "สร้างข้อมูลตัวอย่าง"
The Red Pea

5

Microsoft ได้เผยแพร่เครื่องมือ "ตัวสร้างเอกสาร" เป็นตัวอย่าง นี่คือบทความที่อธิบายสถาปัตยกรรมและการทำงานของแอปตัวอย่างในรายละเอียดบางอย่าง

หากคุณต้องการเรียกใช้เครื่องมือสร้างตัวอย่างคลิกที่นี่และติดตั้ง MSI

แจกฟรี. มีแหล่งที่มา ต้องใช้. NET Framework ในการทำงาน ใช้งานได้กับ XSD เท่านั้น (ไม่ใช่ Relax NG หรือ DTD)


ลิงค์ด้านบนเป็นบทความเกี่ยวกับ MSDN ที่เรียกว่า 'การสร้างเอกสาร XML จาก XML Schemas'
Sam Warwick

ตัวติดตั้งจะปล่อยรหัส C # ลงบนเครื่องของคุณ เพียงแค่ถ่ายโอนข้อมูลเหล่านั้นไปยัง LinqPad และคุณมีเครื่องมือสร้างอินสแตนซ์ XML ของคุณฟรี ตาดา!
Sean Kearon

9 ปีต่อมานี่ยังใช้งานได้ดีสำหรับ XSD
Mikanikal

5

XML-XIG: เครื่องมือสร้างอินสแตนซ์ XML

http://xml-xig.sourceforge.net/

opensource นี้จะเป็นประโยชน์


1
ผู้ใช้ไม่ค่อยเป็นมิตร NullPointerExceptionขว้างจำนวนมากของข้อยกเว้นไม่สามารถทำให้มันทำงานหลังจากที่ได้รับไม่ได้อธิบาย
Jarekczek

4

Microsoft Office มี ' InfoPath ' ซึ่งใช้ XSD เป็นการนำเข้าและช่วยให้คุณกำหนดตัวแก้ไขแบบฟอร์มสำหรับการสร้างไฟล์ XML ได้อย่างรวดเร็วและง่ายดาย มันมีสองโหมด - หนึ่งที่คุณกำหนดรูปแบบและโหมดอื่นที่คุณสร้างไฟล์ XML โดยการกรอกแบบฟอร์ม ฉันเชื่อว่ามันมาพร้อมกับ Office 2003 เป็นครั้งแรกและคนส่วนใหญ่ไม่เคยติดตั้ง มันทำให้ฉันตกใจเท่าไหร่ที่ฉันชอบ


1

XMLBlueprint 7.5 สามารถทำสิ่งต่อไปนี้: - สร้าง xml ตัวอย่างจาก dtd - สร้าง xml ตัวอย่างจาก relax ng schema - สร้าง xml ตัวอย่างจาก schema xml


1

เวอร์ชันโอเพ่นซอร์สของSoapUIสามารถสร้างคำขอ SOAP จาก WSDL (ซึ่งมีคำจำกัดความประเภท XSD) ดังนั้นดูเหมือนว่าจะมีการใช้งานโอเพ่นซอร์สของฟังก์ชันนี้ น่าเสียดายที่ฉันยังไม่พบว่ามีการใช้ห้องสมุดใดในการนี้


1

Liquid XML สตูดิโอมีตัวอย่าง XML ปั่นไฟวิซาร์ดซึ่งจะสร้างไฟล์ XML ตัวอย่างจาก XML Schema ดูเหมือนว่าข้อมูลที่ได้จะสอดคล้องกับสคีมา (ไม่สามารถสร้างข้อมูลสำหรับรูปแบบ regex) ได้

สร้างตัวอย่าง XML จาก XSD


0

OpenXSDห้องสมุดกล่าวว่าพวกเขามีการสนับสนุนสำหรับกรณี XML สร้างบนพื้นฐานของ XSD ตรวจสอบว่า


คุณช่วยโพสต์ตัวอย่างการใช้งานได้ไหม
naXa


0

XML Blueprint ทำเช่นนั้น คำแนะนำที่นี่

http://www.xmlblueprint.com/help/html/topic_170.htm

มันไม่ฟรี แต่มีการทดลองใช้ฟรี 10 วัน ดูเหมือนว่ารวดเร็วและมีประสิทธิภาพ น่าเสียดายที่มันเป็น Windows เท่านั้น


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