【问题标题】:Linq to Xml and custom xml entitiesLinq to Xml 和自定义 xml 实体
【发布时间】:2009-04-01 19:51:33
【问题描述】:

我想使用 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 undeclared entity 'InvisibleTimes' 如何声明实体或忽略检查?

【问题讨论】:

    标签: c# xml linq mathml


    【解决方案1】:

    根据this thread,LINQ to XML 不包括实体引用:它没有任何节点类型。它只是在加载文件时扩展它们,然后你就得到了“普通”字符。

    【讨论】:

      【解决方案2】:

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

      也就是说,您可以尝试使用相应的 unicode 字符。根据http://www.w3.org/TR/MathML2/mmlalias.html,ApplyFunction 是 02061,试试 new XElement("mo", "\u02061")

      【讨论】:

      • 这不起作用:"XElement("mo", "\u02061")"。我不知道为什么这是公认的答案...
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        所以不是

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

        试试

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

        【讨论】:

        • (我编辑显示格式)这看起来实际上让事情变得更糟:&amp;InvisibleTimes
        【解决方案5】:

        我认为您需要一个 DTD 来定义 &InvisibleTimes;

        MathML 2.0 提供了 XHTML + MathML DTD。

        【讨论】:

          【解决方案6】:

          解决方法是对 & 使用任何占位符,例如 ;_amp_; XElement xe = new XElement("mo", ";_amp_;InvisibleTimes) 并在您获得 xml 字符串时恢复它: output = xe.ToString().Replace(";_amp_;", "&amp;")

          【讨论】:

            猜你喜欢
            • 2011-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-02
            • 2013-02-17
            • 1970-01-01
            相关资源
            最近更新 更多