XML清理(从属性值中删除无效字符)

时间:2012-06-28 09:46:22

标签: c# xml-parsing

如何从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” 和&lt;&gt;环绕2

最终出局的是shuld

<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=>
  5. 如果这是正确的,我怎么能用C#做这个,替换方法将不起作用。

    由于

2 个答案:

答案 0 :(得分:1)

为了您的信息,我发现了两种不同的方式,

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

所以非常好,谢谢

答案 1 :(得分:-1)

PHP中的

在进入XML之前,我使用以下内容对数据进行编码: -

function xml_encode($string)
{
    $string=preg_replace("/&/", "&amp;", $string);
    $string=preg_replace("/</", "&lt;", $string);
    $string=preg_replace("/>/", "&gt;", $string);
    $string=preg_replace("/\"/", "&quot;", $string);
    $string=preg_replace("/%/", "&#37;", $string);

    return utf8_encode($string);
}

看起来你会在浏览器中提出建议,直到你真正查看来源。

此时您需要检查“&amp; amp;”和十六进制/八进制代码。

希望有所帮助。