Linq to Xml 和自定义 xml 实体
我想使用 Linq to xml 从表达式树创建 MathML 文档,但我无法弄清楚如何使用 MathML xml 实体(例如 和 &InvisibleTimes): 当我尝试使用它直接创建 XElement 时,
XElement xe = new XElement("mo", "&InvisibleTimes");
它只会转义 & 符号(这不好)。 我还尝试使用 XElement.Parse
XElement xe = new XElement.Parse("<mo>&InvisibleTimes</mo>");
但失败并出现 System.XmlException: Reference to undeclaredEntity 'InvisibleTimes' 我如何声明该实体或忽略检查?
I want to create a MathML document from an expression tree using Linq to xml, but I cannot figure out how to use the MathML xml entities (such as ⁡ and &InvisibleTimes):
When I try to create directly a XElement using
XElement xe = new XElement("mo", "&InvisibleTimes");
it justs escapes the ampersand (which is no good).
I also tried to use XElement.Parse
XElement xe = new XElement.Parse("<mo>&InvisibleTimes</mo>");
but it fails with an System.XmlException: Reference to undeclared entity 'InvisibleTimes'
How can I declare the entity or ignore the checks?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
根据此线程,LINQ to XML 不包含实体引用:它没有任何实体引用的节点类型。 它只是在加载文件时扩展它们,之后您就得到了“正常”字符。
According to this thread, LINQ to XML doesn't include entity references: it doesn't have any node type for them. It just expands them as it loads a file, and after that you've just got "normal" characters.
正如其他人指出的那样,没有直接的方法可以做到这一点。
也就是说,您可以尝试使用相应的 unicode caracther。 根据 http://www.w3.org/TR/MathML2/mmlalias.html< /a>,ApplyFunction 为 02061,尝试 new XElement("mo", "\u02061")
As others have pointed out, there is no direct way to do it.
That said, you can try using the corresponding unicode caracther. According to http://www.w3.org/TR/MathML2/mmlalias.html, for ApplyFunction it is 02061, try new XElement("mo", "\u02061")
我不知道
XDocument
,但您可以使用XmlDocument
来做到这一点:I don't know about
XDocument
, but you can do it withXmlDocument
:您可能需要对名称进行 xml 编码,因为“&” 是一个特殊字符。
所以而不是
尝试
You may need to xml encode the names because '&' is a special character.
So instead of
try
我认为您需要一个 DTD 来定义 。
MathML 2.0 提供了 XHTML + MathML DTD。
I think you'll need a DTD to define <mo></mo>.
MathML 2.0 provides an XHTML + MathML DTD.
解决方法是对 & 使用任何占位符。 例如
;_amp_;
XElement xe = new XElement("mo", ";_amp_;InvisibleTimes)
并在获取 xml 字符串时恢复它:
output = xe.ToString().Replace(";_amp_;", "&")
A workaround is to use any placeholder for the & such as
;_amp_;
XElement xe = new XElement("mo", ";_amp_;InvisibleTimes)
and restore it when you get the xml string:
output = xe.ToString().Replace(";_amp_;", "&")