我想使用Linq到xml从表达式树创建MathML文档,但我无法弄清楚如何使用MathML xml实体(例如和& InvisibleTimes): 当我尝试使用
直接创建XElement时XElement xe = new XElement("mo", "&InvisibleTimes");
它只是逃脱了&符号(这是不好的)。
我也试过使用XElement.Parse
XElement xe = new XElement.Parse("<mo>&InvisibleTimes</mo>");
但它失败并出现System.XmlException:引用未声明的实体'InvisibleTimes' 我如何申报实体或忽略支票?
答案 0 :(得分:2)
根据this thread,LINQ to XML不包含实体引用:它没有任何节点类型。它只是在加载文件时扩展它们,之后你就会得到“普通”字符。
答案 1 :(得分:1)
正如其他人所指出的那样,没有直接的方法可以做到这一点。
也就是说,您可以尝试使用相应的unicode caracther。根据{{3}},对于ApplyFunction,它是02061,尝试新的XElement(“mo”,“\ u02061”)
答案 2 :(得分:0)
我不了解XDocument
,但您可以使用XmlDocument
执行此操作:
XmlDocument doc = new XmlDocument();
var entity = doc.CreateEntityReference("InvisibleTimes");
XmlElement root = (XmlElement)doc.AppendChild(doc.CreateElement("xml"));
var el = root.AppendChild(doc.CreateElement("mo")).AppendChild(entity);
string s = doc.OuterXml;
答案 3 :(得分:0)
您可能需要对名称进行xml编码,因为'&amp;'是一个特殊的角色。
所以而不是
XElement xe = new XElement("mo", "&InvisibleTimes");
试
XElement xe = new XElement("mo", "&InvisibleTimes");
答案 4 :(得分:0)
我认为你需要一个DTD来定义&lt; mo&gt;&lt; / mo&gt ;.
MathML 2.0提供了XHTML + MathML DTD。
答案 5 :(得分:0)
一种解决方法是对&使用任何占位符,例如;_amp_;
XElement xe = new XElement("mo", ";_amp_;InvisibleTimes)
并在获取xml字符串时将其还原:
output = xe.ToString().Replace(";_amp_;", "&")