XML参数异常

时间:2014-05-27 13:24:24

标签: c# xml metadata .net

我正在编写一个程序,从mp3获取元数据信息,然后将其存储到xml文件中。尝试写入文件时出错。错误是:Argument Exception Invalid name character in 'Nirvana

OpenFileDialog getFiles = new OpenFileDialog();
getFiles.Multiselect = true;
 if (getFiles.ShowDialog() == DialogResult.OK)
  {
   foreach (String mp3Files in getFiles.FileNames)
    {
     byte[] Buffer = new byte[128];
     FileStream mediaFile = new FileStream(mp3Files, FileMode.Open);
     mediaFile.Seek(-128, SeekOrigin.End);
     mediaFile.Read(Buffer, 0, 128);
     string isMP3 = Encoding.Default.GetString(Buffer, 0, 3);
       if (isMP3.CompareTo("TAG") == 0)
        {
          string Album = Encoding.Default.GetString(Buffer, 63, 30);
          string Artist = Encoding.Default.GetString(Buffer, 33, 30);
          XMLFileToFile.WriteElementString(Artist, Album); //Error here.
          XMLFileToFile.WriteEndElement();
        }
    }
  }

3 个答案:

答案 0 :(得分:0)

这些是您应该避免的XML文件中的转义字符:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

您可以在转换转义字符时使用此图表:

原始字符 XML实体替换 XML数字替换 < / KBD>
&LT; &安培; LT; &安培;#60;
&GT; &安培; GT; &安培;#62;
&amp; quot; &amp;#34;
&安培; &放大器;放大器; &安培;#38;
&安培;者; &安培;#39;

对于您的代码,您可以编写如下内容:

string Album = Encoding.Default.GetString(Buffer, 63, 30).ValidateXML();
string Artist = Encoding.Default.GetString(Buffer, 33, 30).ValidateXML();
XMLFileToFile.WriteElementString(Artist, Album); //This should run smoothly.

static string ValidateXML(this string value)
{
   return value.Replace(@"""","&quot;").Replace("'","&apos;").Replace("<","&lt;").Replace(">","&gt;").Replace("&","&amp;");
}

答案 1 :(得分:0)

你需要转义你的字符串,单引号会让你的代码失控。

尝试这样的事情。

Filename = Filename.Replace("'", @"\'");

答案 2 :(得分:0)

使用WriteElementString,您尝试使用Artist作为节点的名称,对于您报告的错误,它包含引号,该引号不是节点名称的有效字符。请尝试删除引号和其他无效字符。