2011-06-15 50 views
0

我已經使用xsd.exe生成了一組類,並從生成的生成代碼創建了一個XML文檔。現在我想對照原始的xsd驗證序列化的類實例。如何在C#中沒有名稱空間的情況下進行簡單的XML模式驗證

我的XML是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    -- rest of XML document here 
</MyRoot> 

我的XSD是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="MyRoot" type="MyRootType"/> 
    -- MyRootType definition and rest of XSD 
</xs:schema> 

當我嘗試使用的XmlReader驗證XML,我收到以下錯誤: 「的'MyRoot'元素沒有被聲明。「

什麼可能是錯的?

+0

該錯誤是否表明MyRoot元素被發現從XML中丟失(它不是),或者發現MyRoot元素從XSD中找不到(這也不是)。 – Craig 2011-06-15 13:03:39

回答

-1

該方法是正確的,但XSD沒有被正式讀取。我糾正了這一點,它按預期工作。

+0

你能描述一下你的解決方案嗎? – 2013-06-21 13:13:07

1

在您的MyRoot元素中,您需要添加XSD的位置。我還建議定義命名空間(除非你有充分的理由不要)。

<api:MyRoot xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xmlns:api='http://www.myserver.com/schema' 
    xsi:schemaLocation='http://www.myserver.com/schema http://www.myserver.com/schema/websuiterecord.xsd'> 
</api:MyRoot> 

這樣,驗證工具知道在哪裏可以找到您的XSD來驗證您的XML。

+0

理想情況下,我想不要觸摸XML或XSD,而只是告訴讀者如何閱讀它。這可能嗎? – Craig 2011-06-15 12:47:14

+0

XML必須以當前格式發送到其他第三方系統。如果需要,可以稍微調整XSD。 – Craig 2011-06-15 13:02:17

+0

您應該可以通過方法或構造函數或其他方法將XSD的位置提供給xml讀取器。 – Zoidberg 2011-06-15 13:05:34

相關問題