Pregunta

Quiero crear un documento MathML de un árbol de expresión utilizando LINQ to XML, pero no puedo encontrar la manera de utilizar las entidades XML MathML (tales como ⁡ y Y InvisibleTimes): Cuando trato de crear directamente una XElement utilizando

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

justs se escapa el signo (lo cual no es bueno). También probé a usar XElement.Parse

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

pero falla con un System.XmlException: Referencia a la entidad no declarada 'InvisibleTimes' ¿Cómo puedo declarar la entidad o ignorar los cheques?

¿Fue útil?

Solución

Como otros han señalado, no hay forma directa de hacerlo.

Dicho esto, puede intentar utilizar la correspondiente caracther Unicode. Según http://www.w3.org/TR/MathML2/mmlalias.html , por applyFunction es 02061, probar nuevas XElement ( "mo", "\ u02061")

Otros consejos

De acuerdo con este enhebrar , LINQ to XML no incluye referencias a entidades: que no tiene ningún tipo de nodo para ellos. Sólo ellos se expande cuando se carga un archivo, y después de eso sólo tienes personajes "normales".

No sé sobre XDocument, pero se puede hacer con 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;

Es posible que necesite xml codificar los nombres porque 'Y' es un carácter especial.

Así que en lugar de

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

try

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

Creo que se necesita un DTD para definir ⁢ .

MathML 2.0 proporciona una XHTML + MathML DTD.

Una solución consiste en utilizar cualquier marcador de posición para el y como ;_amp_; XElement xe = new XElement("mo", ";_amp_;InvisibleTimes) y restaurarlo cuando llegue a la cadena XML: output = xe.ToString().Replace(";_amp_;", "&")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top