3

MathML を解析するために MathML DTD を使用してSystem.Xml.Linq.MMLEXTRAます。私が使用しているコードは次のとおりです。

  if (!string.IsNullOrWhiteSpace(mathML))
  {
    try
    {
      const string preamble =
          "<!DOCTYPE mml:math PUBLIC \"-//W3C//DTD MathML 2.0//EN\"\n" +
           "\"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd\" [\n" +
           "<!ENTITY % MATHML.prefixed \"INCLUDE\">\n" +
           "<!ENTITY % MATHML.prefix \"mml\"> \n" +
         "]>";
      var parsed = Parser.Parse(preamble + Environment.NewLine + mathML);
      textEditor.Text = printed;
      lblStatus.Caption = "MathML successfully translated.";
    } 
    catch (Exception e)
    {
      lblStatus.Caption = "Cannot translate text. " + e.Message;
    }
  }

パーサーは単純にXDocument.Load(). どんな助けでも大歓迎です!

4

1 に答える 1

6

ここから

DTD のエンティティは本質的に安全ではありません。DTD を含む悪意のある XML ドキュメントにより、パーサーがすべてのメモリと CPU 時間を使用し、サービス拒否攻撃を引き起こす可能性があります。したがって、LINQ to XML では、DTD 処理は既定でオフになっています。信頼できないソースからの DTD を受け入れるべきではありません。

ただし、有効にするにはXDocumentType classを使用する必要があります。

いくつかの可能な解決策:

XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;

XmlReader reader = XmlReader.Create(Server.MapPath("filename"), settings);

XDocument doc = XDocument.Load(reader);

または多分:

 XDocument xDocument = new XDocument(new XDocumentType("Books",null,"Books.dtd", null),new XElement("Book"));

すべての情報は同じソースからのものです

于 2011-08-22T17:44:45.553 に答える