DTD 또는 XSD에서 샘플 XML 문서를 생성하는 방법은 무엇입니까?


186

상당한 양의 XML 변환이 포함 된 응용 프로그램을 개발 중입니다. DTD 또는 XSD 파일만으로 적절한 입력 테스트 데이터가 없습니다. 이 파일에서 테스트 데이터를 직접 생성하고 싶습니다. 그렇게하는 쉬운 / 무료 방법이 있습니까?

편집하다

이를위한 무료 도구는 분명히 없으며 OxygenXML이이를위한 최고의 도구 중 하나라는 데 동의합니다.


8
Q & A 형식에 맞지 않거나 요청하는이 질문에 대한 답변을 보지 못했습니다.debate, arguments, polling, or extended discussion
mjn

답변:


29

나는 산소 ( http://www.oxygenxml.com/ )도 그것을 한다고 생각 하지만, 이것은 또 다른 상용 제품입니다. 그래도 좋은 것입니다 ... XML 작업을 많이하는 사람에게는 강력히 추천합니다. 멋진 Eclipse 플러그인도 제공됩니다.

나는 완전한 기능을 갖춘 30 일 무료 평가판이 있다고 생각합니다.


나는 다른 XSD에서 스키마를 상속받는 많은 XSD를 가지고 있으며이 XSD에서 테스트 목적으로 XML 파일을 생성해야합니다. 루트 노드를 정의하십시오.하지만 그렇게 할 수는 없습니다. 만약 누군가 산소 XML 작업을 해본 사람이라면이 문제를 해결할 수있는 방법을 제안 해 주시겠습니까?
Rachel

감사합니다. 이것은 내 질문에도 대답했습니다! 당신이 내 질문에 대답 올하려는 경우 : stackoverflow.com/questions/7041388/...을 , 나는 더 이상 행복 답변으로 당신을 표시하는 것입니다.
Eric H

179

Visual Studio 2008 SP1 이상에서 XML 스키마 탐색기 는 몇 가지 기본 샘플 데이터를 사용하여 XML 문서를 만들 수 있습니다.

  1. XSD 문서를여십시오
  2. XML 스키마 탐색기로 전환
  3. 루트 노드를 마우스 오른쪽 단추로 클릭하고 "Generate Sample Xml"을 선택하십시오.

XML 스키마 탐색기의 스크린 샷


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 생성"만 표시됩니다. 요소는 녹색 왼쪽 / 오른쪽 꺾쇠 괄호 ( "<>")를 통해 그래픽으로 표시됩니다. 유형을 마우스 오른쪽 버튼으로 클릭하고 생성 메시지는 요소에 대해서만 유형을 생성합니다 (이는 의미가 있습니다).
Miguel Sevilla

126

무료 및 공개 소스 Eclipse IDE 의 최신 버전에서는 DTD 및 XSD 파일에서 XML 문서를 생성 할 수 있습니다. 지정된 * .dtd 또는 * .xsd 파일을 마우스 오른쪽 단추로 클릭하고 "생성-> XML 파일 ..."을 선택하십시오. 생성 할 루트 요소와 선택적 속성 및 요소 생성 여부를 선택할 수 있습니다.

물론 Eclipse를 사용하여 DTD 및 XSD 스키마 파일을 작성하고 편집 할 수도 있습니다. 그리고 플러그인을 설치할 필요가 없습니다. 표준 배포판에 포함되어 있습니다.


감사! Eclipse는 무료이며 이것이 완벽한 솔루션이었습니다.
Akku

이 기능이 어떤 Eclipse 기능을 제공하는지 알고 있습니까? 내 "Generate"하위 메뉴에는 "JAXB Classes"가 유일한 항목입니다.
otto.poellath

9
이러한 옵션을 얻으려면 웹 도구 프로젝트 (도움말-> 새 소프트웨어 설치 참조)를 설치해야합니다.
pwaring

3
Eclipse는 좋은 옵션처럼 보이지만 세대가 가져온 XSD를 따를 수 없습니다. 예를 들어, 3 개의 요소를 설명하는 XSD가 있고 그 중 하나가 참조 / 가져온 XSD에 정의 된 complexType 인 경우 해당 요소에 대해 생성되지 않습니다. 어떤 아이디어?
David Hergert

@DavidHergert 간단한 해결 방법은 스텁 유형을 생성하는 것입니다.
Adam Matan

32

Intellij Idea 사용자의 경우 :

도구-> XML 조치를 살펴보십시오.

여기에 이미지 설명을 입력하십시오

(내가 테스트 한 한) 잘 작동하는 것 같습니다.

편집하다:

@naXa에서 언급했듯이 이제 XSD 파일을 마우스 오른쪽 버튼으로 클릭하고 "XSD 스키마에서 XML 문서 생성 ..."을 클릭 할 수도 있습니다.


(시퀀스에 대해) 생성 할 요소 수를 지정하는 방법이 있습니까?
Nikita

이 스레드의 모든 솔루션을 테스트했으며 이것이 가장 효과적이었습니다.
FLX

1
수입품이 많은 XSD가있는 최신 RubyMine (v. 7.0, Intellij Idea 기반)에서는 작동하지 않습니다. 오류 메시지 만 있습니다.
Envek

3
"스키마 편집 오류"?
The Red Pea

1
최신 버전에서는 XSD를 마우스 오른쪽 버튼으로 클릭하고 "XSD 스키마에서 XML 문서 생성 ..."을 선택하십시오.
naXa

12

Sourceforge.net에서 사용 가능한 캠 프로세서는 모든 XSD에 대해 xml 테스트 케이스 생성을 수행합니다. 무작위 힌트가 아닌 실제 예제를 보장하기 위해 콘텐츠 힌트를 사용하는 등 자체 테스트 예제를 생성하는 방법을 보여주는 자습서가 있습니다.

이 튜토리얼은 여기에 있습니다 : http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

XA를보다 XSLT 친화적 인 구조로 리팩토링하기 위해 OASIS CAM (Assembly Assembly Mechanism) 표준을 사용하는 도구에 대한 자세한 정보는 자원 웹 사이트 ( http://www.jcam.org.uk) 에서 찾을 수 있습니다 .

즐기십시오, DW


3
Sourceforge.net 다운로드에 대한 직접 링크는 다음과 같습니다 sourceforge.net/projects/camprocessor

@Pyderman-설정입니다. 설정을 변경하는 방법을 찾으십시오.
Ghoti

10

Sun / Oracle Multi-Schema Validator의 일부인 XML 인스턴스 생성기를 사용할 수 있습니다 .

README.txt 상태입니다.

Sun XML Generator는 여러 종류의 스키마에서 다양한 XML 인스턴스를 생성하는 Java 도구입니다. DTD, RELAX 네임 스페이스, RELAX 코어, TREX 및 W3C XML 스키마 파트 1의 서브 세트를 지원합니다. [...]

이는 스키마에서 유효한 인스턴스와 유효하지 않은 인스턴스를 모두 생성 할 수있는 명령 줄 도구입니다. 특정 스키마를 준수해야하는 XML 애플리케이션에 대한 테스트 케이스를 생성하는 데 사용할 수 있습니다.

msv 다운로드 페이지xmlgen.zip 에서 다운로드하여 압축 을 풀고 다음 명령을 실행하여 자세한 사용법 지침을 얻으십시오.

java -jar xmlgen.jar -help

이 도구는 BSD 라이센스에 따라 출시 된 것으로 보입니다. 소스 코드는 여기 에서 액세스 할 수 있습니다


아주 좋아요! 그래도 약간 제한적입니다. 다른 XSD를 가져 오는 XSD에서 시도했지만 실패했습니다. 그러나 DTD에서는 매우 잘 작동합니다. 감사!
lindelof

1
현재 링크 : 홈페이지 , 다운로드 . 디렉토리 xmlgen.zip에서만 nigthly. 내 xsd에서 샘플을 생성 할 수 없음을 확인했습니다.
Jarekczek

필자의 경우 --example새 샘플 파일을 생성하는 데 사용할 수있는 토큰을 포함 하기 위해 파일 을 사용해야했습니다 . 샘플을 만들려면 샘플이 필요합니다! 쉽지 않다 ...
The Red Pea

java.net 링크는 기본적으로 죽었습니다.
RedGrittyBrick

10

XMLSpy 는 무료가 아니지만 당신을 위해 그렇게합니다 ...

나는 믿고 액체 XML을 스튜디오가 당신을 위해 그것을 수행하고 무료입니다,하지만 난 개인적으로 테스트 데이터를 생성하는 데 사용하지 않았습니다.


그것은 무언가를 생성하지만, 당신은 그것에 대한 많은 통제권을 가지고 있지 않습니다 : 당신은 최상위 요소와 몇 가지 일반적인 옵션을 선택할 수 있지만, XMLSpy를 사용하여 많은 변형이있는 테스트 케이스 세트를 생성 할 수 없습니다.
Hans-Peter Störr

XMLSpy는 좋아 보이지만 xml을 생성 한 후이를 생성하는 데 사용 된 xsd에 대한 유효성 검사에 실패했습니다. 불합격. 그것은 또한 postiveinteger필드 에 barfed- *ERROR*대신에 넣어
Tim Abell

7

아무도 지금까지 질문에 대답 할 수 없었던 것 같습니다 :)

EclipseLink의 MOXy를 사용하여 바인딩 클래스를 동적으로 생성 한 다음 바운드 유형을 재귀 적으로 살펴 봅니다. 다소 무겁지 만 객체 트리가 인스턴스화되면 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

http://www.wmhelp.com 에있는 XMLPad (무료)를 사용 하여 XML 샘플을 생성 할 수도 있습니다 . 메뉴에서 : XSD-> 샘플 XML 파일을 생성하십시오.


"샘플 데이터 생성"을 선택하면 스택 오버플로 또는 "WMHelp XmlPad 작동이 중지되었습니다"
The Red Pea

5

Microsoft는 "문서 생성기"도구를 샘플로 발표했습니다. 이 기사 는 샘플 앱의 아키텍처와 작동을 자세하게 설명 하는 기사 입니다.

샘플 생성 도구 만 실행하려면 여기를 클릭 하고 MSI를 설치하십시오.

무료입니다. 소스를 사용할 수 있습니다. .NET Framework를 실행해야합니다. XSD에서만 작동합니다. (NG 또는 DTD를 이완하지 마십시오).


위 링크는 MSDN에서 'XML 스키마에서 XML 문서 생성'이라고하는 기사에 대한 것입니다
Sam Warwick

설치 관리자가 컴퓨터에 많은 C # 코드를 드롭합니다. LinqPad에 덤프하면 무료 XML 인스턴스 생성기가 있습니다. 타다!
Sean Kearon

9 년이 지난 후에도 여전히 XSD에서 잘 작동합니다.
Mikanikal

5

XML-XIG : XML 인스턴스 생성기

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

이 오픈 소스가 도움이 될 것입니다.


1
매우 사용자 친화적이지 않습니다. 많은 예외가 발생하여 설명 할 수없는 후에는 작동하지 않습니다 NullPointerException.
Jarekczek

4

Microsoft Office에는 XSD를 가져 오기로 사용하고 XML 파일을 만들기위한 양식 기반 편집기를 빠르고 쉽게 정의 할 수있는 ' InfoPath '가 있습니다. 양식을 정의하는 모드와 양식을 작성하여 XML 파일을 작성하는 두 가지 모드가 있습니다. Office 2003과 함께 처음 제공되었으며 대부분의 사람들은 설치하지 않습니다. 내가 얼마나 좋아하는지 충격을받습니다.


1

XMLBlueprint 7.5는 다음을 수행 할 수 있습니다.-DTD에서 샘플 XML 생성-완화 스키마에서 샘플 XML 생성-XML 스키마에서 샘플 XML 생성


1

SoapUI 의 오픈 소스 버전은 WSDL (XSD 유형 정의 포함)에서 SOAP 요청을 생성 할 수 있으므로이 기능의 오픈 소스 구현이있는 것 같습니다. 불행히도, 나는 이것에 어떤 라이브러리가 사용되는지 알아 내지 못했습니다.


1

Liquid XML Studio에는 XML 스키마에서 샘플 XML 파일을 빌드 하는 XML 샘플 생성기 마법사가 있습니다. 결과 데이터는 스키마를 준수하는 것으로 보입니다 (정규 패턴에 대한 데이터를 생성 할 수 없음).

XSD에서 XML 샘플 생성


0

OpenXSD의 라이브러리들은 XSD를 기반으로 XML 인스턴스를 생성하기위한 지원이 있음을 언급하고있다. 확인 해봐


사용 예를 게시 할 수 있습니까?
naXa



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.