2014-02-24 60 views
0

我想將以下定義的xml模式查看到我預期的xml中。任何人都可以幫助我在XSD中編寫什麼內容。提前致謝。 XML模式:在XML如何使用xsd模式創建有效的xml

<xs:element name="Animal"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute name="type" type="xs:string" /> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 

預期輸出:<Animal type="carnivore">Tiger</Animal>

+0

什麼你想要使用模式嗎?你是否想將你的實例與你的模式關聯起來,這樣它可以被驗證?除非您使用模式來生成實例,否則不存在「預期輸出」這樣的事情。在這種情況下,你可能想用Java編寫一些東西。是嗎? – helderdarocha

+0

是的,我想將我的實例與模式關聯。 我想使用XSD文件顯示上面的例外輸出。 – user3348161

+0

哦,好的。然後我會將其添加到答案中。 – helderdarocha

回答

0

對於只包含顯示元素的模式,可以使用JAXB在Java中生成所需的實例。我爲您的示例添加了一些上下文,幷包含一個名稱空間。這是一個完整的XML Schema文件(我把它叫做animals.xsd):

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://animals" 
      targetNamespace="http://animals" 
      elementFormDefault="qualified"> 
    <xs:element name="Animal"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="type" type="xs:string" /> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

使用xjc工具(XSD到Java編譯器),您可以生成XML架構的類。所以,你可以簡單地運行:

xjc animals.xsd 

它會生成這些文件

animals/Animal.java 
animals/ObjectFactory.java 
animals/package-info.java 

將這些classpath中。現在,你可以寫一個簡單的程序,您可以創建使用類實例,然後利用JAXB編組它序列化到XML:

import animals.Animal; 
import javax.xml.bind.*; 

public class App { 

    public static void main(String[] args) throws JAXBException { 
     Animal tiger = new Animal(); 
     tiger.setType("carnivore"); 
     tiger.setValue("Tiger"); 

     JAXBContext jaxbContext = JAXBContext.newInstance(Animal.class); 
     Marshaller m = jaxbContext.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     m.marshal(tiger, System.out); 
    } 
} 

結果將被打印到控制檯:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Animal xmlns="http://animals" type="carnivore">Tiger</Animal> 
+1

如果您只是想將實例關聯到架構,那麼您需要添加一個或多個屬性,具體取決於您是否具有名稱空間。如果架構(上面的命名空間)和實例位於同一個目錄中,則可以使用 Tiger'。 – helderdarocha