我的最終目標是遍歷XSD文檔並如由XSD文檔描述是爲了顯示一個TreeView(Silverlight的4.0)中的所有XML元素的表示。幫助與遍歷複雜的XSD文檔
所以,如果我有這樣的描述一組元素,將看起來像
<a>
<b att1="foo" att2="foo2"/>
<c />
<d />
</a>
話,我會想顯示像一個TreeView XSD文件:
a
|_b
| |_att1
| |_att2
| |_c
|_d
我不注意XSD文檔是否允許多次出現或可選的元素和屬性。我想列出多次發生的元素,並且所有必需的和可選的元素/屬性都應該出現。例如允許的模式
<a>
<b att1="foo" att2="this one was optional"/>
<c />
<d />
<d />
</a>
仍然應該返回我以前展示的同一個TreeView。
不過,我無法理解去這樣做的最佳方式。我開始使用XmlReader來運行xsd文檔,但後來發現它可能變得複雜,處理跨文件的引用......例如,具有「ref」或「type」屬性....或「擴展」元素的元素。
所以,我創建了一個WCF服務,所以我可以使用的XmlSchema類,看看在那裏。我寫以下代碼:
XmlTextReader reader = new XmlTextReader("http://myXsdLocation.com/SalesOrder.xsd");
XmlSchema myschema = XmlSchema.Read(reader, ValidationCallback);
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(myschema);
schemaSet.Compile();
調試通過代碼,所述schemaSet計數增加到8 schemaSet.Compile(),之後,我假定意味着,與所有的「包括」在初始XSD文件引用,如就像在引用的xsd文件中一樣,最初的一個xsd文件總共有8個xsd文件是合理的。
但是從schemaSet對象noodling的時候,我還沒有找到一種方法來通過優雅的整個模式橫移,好像它是一個巨大的XSD文件。
有沒有人知道一種方法來完成我想要做的事情?我只是希望能夠按照它作爲一個巨大的XSD文件出現的順序來拉取每個元素,並且將所有屬性附加到該元素並將數據提供給我的TreeView。我用UI的東西沒問題,但需要知道是否最好用XmlReader編寫我自己的解析器或使用XmlSchema和相關的類。我在整個StackOverflow中發現了類似的問題,但其中大部分都引用了代碼gen工具,或者與我正在尋找的工具無關。我想開發一些東西來獲取任何xsd並生成我之前提到的樹。
除非你還在使用.NET 1.1,你不應該使用'新的XmlTextReader()'。您應該改用'XmlReader.Create()'。 – 2011-06-01 23:51:33