2012-03-27 27 views
2

を編集して保存した後角括弧を取り除くためにどのように[] XMLファイル私は次のXMLのdoctypeの終わりに角括弧を取り除くにはどうすればよい

<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd"[]> 

私は、XMLをロードするコードを持っていますファイルを変更してから、ファイルを保存します。ここで

は、元のファイル(ノー角括弧)の見出しです:

<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd"> 

私はそれが作成した文書を変換するときに"SMIL20.dtd">"

の終わりに何の[]はありません見ることができるように次のような角括弧のペア "SMIL20.dtd" []>ここで

はサンプルです:

class FileWorker 
{ 
    public static void UpdateFile(string myfile) 
    { 
      var doc = XDocument.Load(myfile);   
      try 
      { 
       foreach (var elem in doc.Elements()) 
       { 

        if (elem.Name.LocalName == "type") 
        { 
         foreach (var child in elem.Elements()) 
         { 
          if (child.Name.LocalName == "head") 
          { 
           foreach (var gc in child.Elements()) 
           { 
            if (Configuration.Cdntosync == 0) 
            { 
             if (gc.Attributes().Any(att => att.Name.LocalName == "name" && att.Value == "httpBase")) 
             { 
              gc.RemoveAttributes(); 
              gc.Add(new XAttribute("base", "rtmp://mybase")); 
             } 
            } 
            else if (Configuration.Cdntosync == 1) 
            { 
             if(gc.Attributes().Any(att => att.Name.LocalName == "name" && att.Value == "vod")) 
             { 
              gc.Remove(); 
             } 
             gc.RemoveAttributes(); 
             if (basecheck == false) 
             { 
              gc.Add(new XAttribute("base", "rtmp://mybase2")); 
              basecheck = true; 
             } 
            } 
           } 

           basecheck = false; 
          } 
          else if (child.Name.LocalName == "body") 
          { 
           foreach (var gc in child.Elements()) 
           { 
            if (gc.Name.LocalName == "switch") 
            { 
             foreach (var video in gc.Elements()) 
             { 
              foreach (var att in video.Attributes()) 
              { 
               if (att.Name.LocalName == "src") 
               { 

                att.Value = att.Value.Replace("v1/test/", "mp4:Flvstream/"); 

               } 
              } 
             } 
            } 
           } 
          } 
         } 
        } 


        doc.Save(myfile); 

       } 

      } 
     catch(Exception ex) 
      { 
       logger.Log(ExceptionLogger.LogLevel.ERROR, ex); 

      } 

     //} 

    } 
+0

たぶんコンパイラはハイネストレベルの疲れ、と私はいくつかのXPath式を使用する代わりに、DOMをforeachingたい:-)混乱のうちのいくつかのブラケットを投げた... – seldary

答えて

5

はちょうど同じ問題全体に自分自身を来ります。同じ問題を解決しようとしている人たちに私の解決策を教えてください。ここでは、次のとおりです。

doc.DocumentType.InternalSubset = null; 
+0

あなたが設定カントInternalSubsetが4.0でnullになると、読み取り専用のプロパティーになります – Les

+0

4.0では読み取り専用ではありません([リンク](http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocumenttype.internalsubset%28v= vs.110%29.aspx))。私は上記の提案を試みたが、InternalSubsetはとにかくnullだった。たぶんnull nullを考慮していないXmlWriterと何か関係がありますか? –

+0

_ "4.0ではInternalSubsetをnullに設定できません。これは読み取り専用プロパティ" _です。 InternalSubsetはXmlDocumentのための読み取り専用です。 InternalSubsetはXDocumentに対して書き込み可能です。 – wisbucky

関連する問題