2011-03-04 9 views
5

Wewnątrz mojej aplikacji sieciowej sprawdzam poprawność dokumentów Xml przy użyciu plików xsd jako zasobów osadzonych i to było łatwe przy użyciu assembly.GetManifestResourceStream(string).Jak używać include we wbudowanym XSD, odwołującym się do innego osadzonego xsd?

Potrzebuję teraz użyć elementu include (potrzebuję rzeczywiście redefine, ale otrzymuję błąd jest taki sam, więc poszerzam zakres pytania) wewnątrz jednego z moich xsd odwołując się do innego osadzonego xsd, więc co I nie było:

  • dodać następujące linie do AssemblyInfo.cs projektu

    [assembly: System.Web.UI.WebResource("TurniArc.xml.schema.ImportOperatoriParametri.xsd", "text/xml", PerformSubstitution = true)]

    [assembly: System.Web.UI.WebResource("TurniArc.xml.schema.ProcessiInput.xsd", "text/xml", PerformSubstitution = true)]

  • zmodyfikowane „obejmuje” element „wewnątrz” ImportOperatoriParametri.xsd w to:

    <xs:include schemaLocation="<% = WebResource("TurniArc.xml.schema.ProcessiInput.xsd") %>"> 
    

Technika ta działa, kiedy było odniesienie osadzony obraz z osadzonym css. Niestety, tutaj tak nie jest, ponieważ metoda GetManifestResourceStream zgłasza wyjątek

'<', hexadecimal value 0x3C, is an invalid attribute character. Line 3, position 34. 

Wydaje się, że atrybut „PerformSubstition” nie została ustawiona, ponieważ próbuje odczytać atrybut schemaLocation jako „regularnego” ciąg.

Co robię źle? Dziękujemy

+0

+1 Bardzo przydatne i ważne pytanie. –

Odpowiedz

1

Wygląda na to, że niepoprawnie zagnieżdżono podwójne cudzysłowy w atrybucie. Najprostszym byłoby użycie pojedynczych cudzysłowów dla pary zewnętrznej.

<xs:include schemaLocation='<% = WebResource("TurniArc.xml.schema.ProcessiInput.xsd") %>'> 
+0

Masz rację, tęskniłem za tym, ale nadal nie działa z pojedynczymi cytatami wewnątrz lub na zewnątrz. – Piddu

+0

No cóż - ten sam komunikat o błędzie? – xan

+0

ten sam komunikat o błędzie (dlaczego komentarze muszą mieć co najmniej 15 znaków? :-) Mogłem odpowiedzieć zwykłym tak) – Piddu