2015-09-16 3 views
1

Когда я пытаюсь использовать функцию сравнения из MS API (XmlDiffPatch), это дает мне ошибку «незаконные символы в пути».Сравнение двух XML - «незаконных символов в пути»

Это мой код:

public void CompareXMLStructer(string a, string b) 
     { 
      try 
      { 
       using (var fs = new FileStream(@"C:\Test\result.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
       { 
        var diffWriter = XmlWriter.Create(fs); 
        var xmlDiff = new XmlDiff(XmlDiffOptions.IgnoreChildOrder | 
               XmlDiffOptions.IgnoreNamespaces | 
               XmlDiffOptions.IgnorePrefixes); 
        var identical = xmlDiff.Compare(a, b, false, diffWriter); 
        MessageBox.Show(identical ? "YES" : "NO"); 
        diffWriter.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 

Исключение:

Exception thrown: 'System.ArgumentException' in mscorlib.dll 
System.ArgumentException: Niedozwolone znaki w ścieżce. //<-That means Illegal expresion in path 
    w System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) 
    w System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) 
    w System.IO.Path.GetFullPathInternal(String path) 
    w System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri) 
    w System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri) 
    w System.Xml.XmlTextReaderImpl..ctor(String url, XmlNameTable nt) 
    w System.Xml.XmlTextReader..ctor(String url) 
    w Microsoft.XmlDiffPatch.XmlDiff.OpenDocuments(String sourceFile, String changedFile, XmlReader& sourceReader, XmlReader& changedReader) 
    w Microsoft.XmlDiffPatch.XmlDiff.Compare(String sourceFile, String changedFile, Boolean bFragments, XmlWriter diffgramWriter) 
    w WindowsFormsApplication1.Comparision.CompareXMLStructer(String a, String b) w C:\Users\zos-srv\documents\visual studio 2015\Projects\Porownywarka\WindowsFormsApplication1\Comparision.cs:wiersz 44 
The thread 0x1334 has exited with code 0 (0x0). 

Может ли это быть вызвано \ г \ п и т.д. в моей строке или, может быть, кодирующая неправильно?

строка:

 a "<?xml version=\"1.0\" encoding=\"Windows-1250\"?>\r\n<Dokument idDokumentu=\"6183457\" numer=\"32178.2015\" idSprawy=\"6187041\" wersja=\"1\" dataDokumentu=\"2015-09-09T00:00:00\" numerObcy=\"\" rodzajObcy=\"\" idObcy=\"\" vidObcy=\"\" wersjonowanie=\"0\" statusBIP=\"E\" korespSystemWew=\"N\" nrWgRejestru=\"\" system=\"EDOKUMENT\" oznWysylka=\"true\" wysylka=\"false\" odbiorOsobisty=\"false\" kopia=\"false\" kodKreskowy=\"\" dostep=\"1\" format=\"\" typ_dublin_core_metadata=\"8\" rwa=\"0003\" znakDokumentu=\"\" obcy=\"false\" odwzorowanie=\"\" znak_sprawy_alt=\"\" kat_arch=\"A\" idDokumentuPierw=\"0\" numerWSprawie=\"4\" czySaUwagi=\"false\" ntas=\"false\" idSkladuChronologicznego=\"0\" zatwierdzonyUzytk=\"true\">\r\n <Opis>\r\n <![CDATA[Testowy dokument]]>\r\n </Opis>\r\n <Notatka>\r\n <![CDATA[]]>\r\n </Notatka>\r\n <Typ idTypu=\"12938\" nazwa=\"OR Inne\" kategoriaBIP=\"\" sciezkaBIP=\"\" podlegaZatwierdzaniu=\"true\" czyBip=\"false\"/>\r\n <Status idStatusu=\"0\" nazwa=\"\"/>\r\n <Podmiot idPodmiotu=\"6183458\" typPodmiotu=\"G\" idPodmiotuExt=\"5573\" rodzajPodmiotu=\"K\" imie=\"\" nazwisko=\"\" nazwaFirmy=\"Rekord Systemy Informatyczne Sp.z o.o.\" nazwaSkroconaFirmy=\"REKORD\" PESEL=\"\" NIP=\"\" REGON=\"\" idZewnetrzne=\"\" rodzajPodmiotuExt=\"F\" email=\"\">\r\n <Adres kodPocztowy=\"43-300\" miasto=\"Bielsko-Biała\" ulica=\"Kasprowicza\" numerDomu=\"5\" numerLokalu=\"\" kraj=\"Polska\" adresSkrytki=\"\" dzielnica=\"\" skrytkaPocztowa=\"\" adresZagraniczny=\"false\"/>\r\n </Podmiot>\r\n <Folder idFolderu=\"4823\" nazwa=\"MIROSŁAW ZIAJA\"/>\r\n <Utworzenie symbolPracownika=\"216\" nazwisko=\"ZIAJA\" imie=\"MIROSŁAW\" data=\"2015-09-09T11:48:36\"/>\r\n <Dysponenci>\r\n <Dysponent ident=\"6183461\" symbolPrac=\"216\" nazwisko=\"MIROSŁAW ZIAJA\" imie=\"\" wiodacy=\"true\" tylko.do.odczytu=\"false\" obcyId=\"\" obcyLogin=\"\" stanowisko=\"Inspektor (OR-o)\" rodzaj=\"P\"/>\r\n </Dysponenci>\r\n <Zatwierdzenia>\r\n <Zatwierdzenie data=\"2015-09-14T14:24:44\" rodzaj=\"1\" czyBlokuje=\"true\" kierownicze=\"false\">\r\n  <Pracownik symbolPracownika=\"216\" nazwisko=\"ZIAJA\" imie=\"MIROSŁAW\" stanowisko=\"\" stanowiskoIdent=\"0\" pracIdent=\"216\" funkcjaIdent=\"0\"/>\r\n </Zatwierdzenie>\r\n </Zatwierdzenia>\r\n</Dokument>\r\n" 

ответ

4

Как вы можете прочитать в трассировке стека, первые две строки xmlDiff.Compare(string, string, ...) принимают пути, а не XML строки.

Я не знаю, где находится документация для этой библиотеки, поэтому я не знаю, есть ли перегрузки Stream, например. Если нет, просто временно записывайте файлы на диск.

Смежные вопросы