2009-04-01 2 views
1

Я хочу создать документ MathML из дерева выражений с помощью Linq в xml, но я не могу понять, как использовать сущности MathML xml (такие как & ApplyFunction; и & InvisibleTimes): Когда Я пытаюсь создать непосредственно XElement, используяLinq to Xml и пользовательские объекты xml

XElement xe = new XElement("mo", "&InvisibleTimes"); 

он просто выходит из амперсанда (что нехорошо). Я также попытался использовать XElement.Parse

XElement xe = new XElement.Parse("<mo>&InvisibleTimes</mo>"); 

но она не с System.XmlException: Ссылка на необъявленную Entity «InvisibleTimes» Как я могу объявить объект или игнорировать проверки?

ответ

1

Как указывали другие, нет прямого способа сделать это.

Это, вы можете попробовать использовать соответствующий unicode caracther. Согласно http://www.w3.org/TR/MathML2/mmlalias.html, для ApplyFunction это 02061, попробуйте новый XElement («мо», «\») u02061

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; 
0

Вам может понадобиться перекодирует имена, потому что «&» является специальным символом.

Таким образом, вместо

XElement xe = new XElement("mo", "&InvisibleTimes"); 

попробовать

XElement xe = new XElement("mo", "&amp;InvisibleTimes"); 
+2

(я отредактирован, чтобы показать форматирование) Это выглядит на самом деле еще хуже: & амп; InvisibleTimes

1

Согласно this thread, LINQ к XML не содержит ссылки на сущности: он не имеет каких-либо тип узла для них. Он просто расширяет их, когда он загружает файл, а после этого вы только что получили «нормальные» символы.

0

Я думаю, вам понадобится DTD для определения <mo> & InvisibleTimes; </mo >.

MathML 2.0 предоставляет XHTML + MathML DTD.