Linq to Xml 和自定义 xml 实体

发布于 2024-07-16 01:05:47 字数 465 浏览 5 评论 0原文

我想使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

oО清风挽发oО 2024-07-23 01:05:47

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.

趁年轻赶紧闹 2024-07-23 01:05:47

正如其他人指出的那样,没有直接的方法可以做到这一点。

也就是说,您可以尝试使用相应的 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")

怎会甘心 2024-07-23 01:05:47

我不知道 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;

I don't know about XDocument, but you can do it with 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;
把梦留给海 2024-07-23 01:05:47

您可能需要对名称进行 xml 编码,因为“&” 是一个特殊字符。

所以而不是

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

尝试

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

You may need to xml encode the names because '&' is a special character.

So instead of

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

try

XElement xe = new XElement("mo", "&InvisibleTimes");
孤檠 2024-07-23 01:05:47

我认为您需要一个 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.

ゝ杯具 2024-07-23 01:05:47

解决方法是对 & 使用任何占位符。 例如;_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_;", "&")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文