2012-01-18 115 views
0

我有一個要求,我有一個輸入XML和一個XSD。我需要從輸入xml格式轉換爲另一種基於XSD的xml格式。請幫助我,我該如何做到這一點。我是新的XML轉換。XML到XML轉換

+0

什麼技術堆棧您使用的? – 2012-01-18 08:15:12

+1

這是一個過於籠統,沒有明確定義的問題。只是一個輸入和輸出模式沒有定義一個單一的轉換 - 從第一個到第二個轉換可能會有無限數量的轉換。缺少的是轉換的語義 - 要遵守/實施的規則/要求是什麼。例如'Person/Name'可以進入'Seller/Name'或者'Buyer/Name'。在這兩種情況下,我們都會得到想要的格式,但意義上的差異至關重要。 – 2012-01-18 14:09:03

+1

您需要了解XSLT。不要指望人們爲你寫一個XSLT教程來回答你的問題。已經有相當一部分人了。根據我的經驗,學習一門新語言的最好方法是先找到一本好書,然後從封面閱讀。 XSLT的一個優點是,您可以在任何使用的技術堆棧上使用它。但是,您需要儘早決定是使用XSLT 1.0還是2.0 --XSLT 2.0功能強大得多,但卻沒有廣泛使用。 – 2012-01-18 09:47:10

回答

1

對於XML到XML的轉換,您可以使用XSLT。見樣本here。如果您使用的是Java,使用javax.xml.validation.Schema爲XSD驗證

// parse an XML document into a DOM tree 
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document document = parser.parse(new File("instance.xml")); 

// create a SchemaFactory capable of understanding WXS schemas 
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 

// load a WXS schema, represented by a Schema instance 
Source schemaFile = new StreamSource(new File("mySchema.xsd")); 
Schema schema = factory.newSchema(schemaFile); 

// create a Validator instance, which can be used to validate an instance document 
Validator validator = schema.newValidator(); 

// validate the DOM tree 
try { 
    validator.validate(new DOMSource(document)); 
} catch (SAXException e) { 
    // instance document is invalid! 
} 

樣品here

對於改造,使用的TransformerFactory如果你使用XSLT或者你可以通過Marshaller class

0

使用XSLT從XML轉換通過JAXB到POJO和馬歇爾一樣,以XML也是一個代碼..你需要定義你想要輸出的樣子..
它很棒,你有預定義的XSD,所以你知道在轉換後應該是什麼樣的結果XML。所以設計XSL代碼相應..

和XSD不會改變飄飛。(對於任何實際系統)..