2014-03-12 70 views
1

我用javax.xml.validation.Validator.validate(StreamSource, StreamResult),這裏是我的XML和XSD:如何用XSD中的默認值填充空xml元素(通過驗證)?

的xsd:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="note"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     <xs:element name="from" type="xs:string" default="nobody"/> 
    </xs:sequence> 
    <xs:attribute name="color" type="xs:string" default="red" /> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 


XML:

<note> 
    <to>you</to> 
    <from></from> 
</note> 


但我從得到StreamResult被像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<note color="red"> 
    <to>you</to> 
    </from> 
</note> 


根據W3C XML Schema Part 0(見2.2.1 發生約束 para4)

如果元件沒有出現任何內容,模式處理器提供了一個值等於的元素默認屬性。

爲什麼默認屬性填充但不是空元素?我應該怎麼做才能獲得默認值?

+0

您可以重新編輯帖子嗎?它缺乏信息,因此不清楚你在尋找什麼! –

回答

1

XSD用於驗證。它驗證XML的結構和數據,讓我們知道XML是否如預期的那樣,或者它與Schema中定義的不同。

這不是修改XML數據。

參考this [click_here]

你在找什麼是XSLT。 XSLT用於將XML轉換爲帶有自定義層次和數據的XML(或HTML /文本)。

或者,您也可以通過使用來自宿主代碼(如.Net C#或Java)的DOM概念來修改源XML。

或者另一種方式是將XML視爲字符串並使用字符串操作技術。 但不建議使用此方法

+0

感謝您的回答。但是如果不修改XML數據,爲什麼默認屬性被填充,甚至空元素「」也被修改爲「」。還有什麼我應該做的XSD設置? –

+0

我認爲這是''而不是''。大多數XML解析器都會將''轉換爲'​​',這是另一個相同的即空標記。這兩者之間沒有區別。 –

+0

而我的觀點是...... XSD不會改變任何內容,XSD只是另一個用於驗證的XML。這是主機程序,我認爲Java在你的情況正在發揮重要作用。 –