„‚\f‘, hexadezimaler Wert 0x0C, ist ein ungültiges Zeichen“ — nicht reinigen

Ich bin immer der gefürchtete „‚\f‘, hexadezimaler Wert 0x0C, ist ein ungültiges Zeichen“ beim Versuch zu speichern meine Xdocument-Inhalt in einer Datei.

Habe ich es Gegoogelt und ich habe versucht, es zu reinigen, durch die Umwandlung der Xdocument-string reinigt es von nicht-ascii-Zeichen (siehe unten). Die Methode dazu habe ich kopiert von einem anderen poster.

Ist es nun das werfen der Ausnahme, wo ich versuchen, übergeben Sie die Zeichenfolge, um die Reinigung Methode wenn. Es scheint nicht zu wollen, um casten zu einem string. Ich habe versucht, nur die Ausgabe in eine text-fie, so konnte ich sehen, was das problem sein Charakter war, aber er warf dann die Ausnahme. Irgendwelche Ideen, bitte?

public void combineContentXmlWithS1000Dtemplate(XElement content)
{

    XDocument XDoc = XDocument.Load(GlobalVars.pathToDMshells + "\\descript.xml" );

    content.Descendants("para").Where(e => string.IsNullOrEmpty(e.Value)).Remove(); //remove all empty para elements

    XDoc.XPathSelectElement("/dmodule/content").Add(content); //adds the new tree to the S1000D template XML

    writeHeaderData(XDoc);

    //System.IO.File.WriteAllText(GlobalVars.pathToOutput + "\\Log.text", XDoc.ToString()); //It even threw exception here

    string cleanedXML = CleanInvalidXmlChars(XDoc.ToString()); //clean the doc of non ascii characters
    XDocument FinishedDM = XDocument.Parse(cleanedXML);

    saveMyS1000Dfile(FinishedDM);
}

public static string CleanInvalidXmlChars(string StrInput)
{
    //Returns same value if the value is empty.
    if (string.IsNullOrWhiteSpace(StrInput))
    {
        return StrInput;
    }
    //From xml spec valid chars:
    //#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]    
    //any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
    string RegularExp = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
    return Regex.Replace(StrInput, RegularExp, String.Empty);
}
  • Warum würden Sie erwarten, dass die Strippen von nicht-ascii-Zeichen zu entfernen \f? Ein form-feed ist ein ascii-Zeichen…
  • Gut, ich werde nur durch das, was die Ausnahme ist, mir zu sagen. Haben Sie irgendwelche Vorschläge, wie man helfen?
  • Der einzige Vorschlag, den ich geben kann ist, zu vielleicht versuchen zu tun, ein einfaches ersetzen der Zeichenfolge zu entfernen \f. Wenn so etwas wie myString = myString.Replace("\f",""); nicht funktioniert, besteht möglicherweise ein größeres Problem.
  • XDoc.ToString() macht genau das gleiche wie ‚Speichern`, also wenn man eine Ausnahme wirft, dann beide. Bieten eine minimale reproduzierbare Beispiel, das zeigt Ihr problem.
  • Das grundlegende problem ist, darzustellen versuchen einige Daten in XML in einer Weise, dass XML nicht erlaubt. Werfen Sie einen Teil der Daten scheint nicht wie eine gute Lösung.



One Reply
  1. 0

    Ok, also dies war für mich am Ende:

    object missing = System.Reflection.Missing.Value;
    
                object findText = "\f";
                object replaceText = "^p^p";
                currentDocument.Range().Find.Execute(ref findText,
                    true, true, true, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref replaceText, Word.WdReplace.wdReplaceAll,
                    ref missing, ref missing, ref missing, ref missing);
    • Was hat Word damit zu tun haben?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.