Dmi*_*ruk 2 c# xml dtd mathml linq-to-xml
我正在使用MathML DTD使用System.Xml.Linq解析MathML.虽然普通的MathML内容得到了很好的识别,System.Xml.Linq.但DTD中的include会被忽略,我会收到错误.这是我正在使用的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
解析器就是这么做的MMLEXTRA.任何帮助赞赏!
从这里开始
DTD中的实体本质上不安全.包含DTD的恶意XML文档可能会导致解析器使用所有内存和CPU时间,从而导致拒绝服务攻击.因此,在LINQ to XML中,默认情况下关闭DTD处理.您不应接受来自不受信任来源的DTD.
但是,要启用它,您应该使用XDocumentType类.
一些可能的解决方案:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
XmlReader reader = XmlReader.Create(Server.MapPath("filename"), settings);
XDocument doc = XDocument.Load(reader);
Run Code Online (Sandbox Code Playgroud)
或者可能:
XDocument xDocument = new XDocument(new XDocumentType("Books",null,"Books.dtd", null),new XElement("Book"));
Run Code Online (Sandbox Code Playgroud)
所有信息均来自同一来源
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |