1

当我尝试使用 MS API (XmlDiffPatch) 中的比较函数时,它给了我一个错误“路径中的非法字符”。

这是我的代码:

 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).

它可能是由我的字符串中的 \r、\n 等引起的,还是编码错误?

细绳:

        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

1 回答 1

4

正如您在堆栈跟踪中看到的那样,xmlDiff.Compare(string, string, ...)accept paths的前两个字符串,而不是 XML 字符串。

我不知道这个库的文档在哪里,所以我不知道是否有Stream重载,例如。如果没有,只需将文件临时写入磁盘。

于 2015-09-16T10:20:43.167 回答