2013-01-21 88 views
1

我有一個xml文檔,它是由我無法更改的進程生成的。它看起來有點像這樣:XML架構需要屬性或空

<root> 
    <foo bar="..." baz="..."/> 
    <foo bar="..." baz="..."/> 
    <foo bar="..." baz="..."/> 
    <foo/> 
    <foo/> 
</root> 

我有一個模式設置爲需要的屬性巴茲和FOO元素上吧,因爲他們需要讀取的文件,以正確運行程序。但是,生成xml的程序有時會將一個或多個空的foo元素添加到最後,如上所示。這會導致模式驗證失敗,但我不想放鬆模式以允許空的foo元素,因爲這可能會導致程序失敗。

有沒有人有解決這個問題最好的方法是什麼建議?我到目前爲止唯一想到的解決方案是預處理xml,刪除任何空的foo元素,但這有點可怕。

回答

1

在XSD 1.0中,沒有辦法說foo元素中的某些元素與其他foo(sibling)元素有不同的驗證規則。你可以在XSD 1.1中用斷言來做到這一點。

驗證之前進行轉換實際上並不是一件壞事。如果您知道在驗證之前需要從文檔中刪除什麼噪聲,然後再進行真正的處理,那麼在驗證之前將一個轉換步驟插入管道中可能是一種非常有效的技術。