2011-04-06 113 views
3

因此,我打算製作XML編輯器模塊,該模塊能夠立即使用XSD進行驗證並在當前編輯位置顯示IntelliSense。C# - 用於創建基於XSD的XML編輯器的庫

驗證部分很簡單,但我在創建智能感知時遇到了問題。

是否有任何使這個智能感知變得簡單的庫,或者沒有其他方法可以從頭開始編寫它?

+0

我需要一些非常簡單的東西。例如: 加載(xml,xsd) AvailableElements(currentElement,insertPosition) – Gapipro 2011-04-06 16:00:45

回答

1

如何使用Visual Studio(Express,Even)?它的智能感知XML內置

+0

包含內置的模式驗證! – Paul 2011-04-06 17:04:36

+0

那麼我不需要一個可以做到這一點的應用程序。我需要爲自己的應用程序創建自己的模塊。這就是爲什麼我說我需要一個庫/類... – Gapipro 2011-04-06 19:17:42

+0

@Gapi:Visual Studio是非常可擴展的。特別是,您可以創建基於Visual Studio的應用程序。請參閱[Visual Studio 2010 SDK](http://visualstudiogallery.msdn.microsoft.com/25622469-19d8-4959-8e5c-4025d1c9183d)。特別是,看看Visual Studio Shell。每次使用Visual Studio時,都會使用此功能在Visual Studio Shell上進行構建。這就是微軟用來創建你購買的軟件包的原因。 – 2011-04-06 19:27:11

0

嘗試Actipro's SyntaxEditor。它適用於WinForms,WPF和Silverlight,包括對抽象語法樹構建,常見類似IntelliSense的視覺線索等的支持。

0

我們在我們的項目中使用了SyntaxBox。性能不是好,有商業產品那裏也相當便宜和高品質。

此外,我相信Scintilla是最強大的免費的語法着色編輯器組件。

1

您可以使用.NET類:XmlSchemaValidator

的2層鍵的方法是:GetExpectedParticles和返回XmlSchemaObject GetExpectedAttributes。在使用這些元素之前,您需要通過驗證所有前後元素和屬性來爲驗證器設置上下文。

您還需要使用從XmlSchemaObject派生的類的方法,這些方法公開了後編譯模式對象模型的各個部分。模型層次結構非常類似於您將在XSD文件中找到的XML結構。您可能需要使用遞歸,並且存在相當多的潛在陷阱,例如處理替換組時,但可以在大約2000行c#中完成合理的解決方案。

+0

太好了,唯一的問題是,Silverlight沒有這個類=) – Gapipro 2011-04-07 05:47:30

+0

好吧,我測試了這個類。它不起作用,因爲我榨取。通過這個類,我只能根據當前驗證器對象(XSD)的層次結構獲取預期的元素,而不是基於創建的XML文件。 – Gapipro 2011-04-10 16:57:43

+0

您需要將節點路徑獲取到XML中的插入符號位置,然後在GetExpectedParticles調用之前遍歷節點以首先設置驗證程序對象上下文。即使在那之後,您需要根據類型轉換期望的粒子,XSD不是微不足道的,因此有2000行代碼。 – pgfearo 2011-09-08 04:05:22