1

XMLから有効な文字を削除する方法はありますが、標準を維持するにはどうすればよいですか

<log>
  <data id="1" name="No Error"  value="0" />
  <data id="2" name="Error "1" between text" value="0" />
  <data id="3" name="Error <2> between text"  value="0"  />
</log>

「1」を囲む引用符と「2」を囲む<>を動的に削除するにはどうすればよいですか

その最終出力は

<log>
  <data id="1" name="No Error"  value="0"  />
  <data id="2" name="Error 1 between text" value="0" />
  <data id="3" name="Error 2 between text"  value="0"  />
</log>

サポートをありがとう

私は次の解決策を考えていました:

  1. ファイルをテキストとして読み取る
  2. で始まり、<Name=>で終わる 文字列を変更します<value=>
  3. すべて削除する",<,>
  4. "<name=>に追加して"前に追加<value=>

これが正しい場合、C# でこれを行うにはどうすればよいですか。replace メソッドは機能しません。

ありがとう

4

2 に答える 2

2

参考までに、2つの異なる方法を見つけました。

1-

public static void ReplaceInvalidCharFromAttribute(string filePath, string startElement, string nextElement, string[] removeStrings)
        {
            string tempFile = Path.GetTempFileName();

            using (var sr = new StreamReader(filePath))
            {
                using (var sw = new StreamWriter(tempFile))
                {
                    string line;
                    string temp;
                    while ((line = sr.ReadLine()) != null)
                    {
                        temp = RemoveInvalidCharFromAttribute(line, startElement, nextElement, removeStrings);
                        sw.WriteLine(temp??line);
                    }
                }
            }

            File.Delete(filePath);
            File.Move(tempFile, filePath);
        }



public static string RemoveInvalidCharFromAttribute(string input, string startElement, string nextElement, string[] invalidChars)
        {
            if (input.IndexOf(startElement) < 0 || input.IndexOf(nextElement) < 0) return null;
            int start =input.IndexOf(startElement) + startElement.Length;
            int end = input.IndexOf(nextElement);
            StringBuilder res = new StringBuilder(input.Substring(start, (end - start)));
            StringBuilder resCopy = new StringBuilder(res.ToString());

            foreach (string inv in invalidChars)
                res.Replace(inv, "");

            // return the result after surrounding the text with double 
            return
                input.Replace(
                resCopy.ToString(),
                (String.Concat("\"", String.Concat(res.ToString().Trim(), "\" "))));
        }

2- http://support.microsoft.com/kb/316063

とても良いです、ありがとう

于 2012-07-02T13:00:38.033 に答える