Linq到Xml和自定义xml实体

时间:2009-04-01 19:51:33

标签: c# xml linq mathml

我想使用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' 我如何申报实体或忽略支票?

6 个答案:

答案 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", "&amp;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_;", "&")