【问题标题】:Replacing <img> with <math> change minus to question mark将 <img> 替换为 <math> 将减号更改为问号
【发布时间】:2020-02-18 16:49:12
【问题描述】:

我想用 MathML(image01.xml) 替换 &lt;span&gt;&lt;img src="images/image01.png&gt;&lt;/span&gt;,如下所示:

<math>
  <semantics>
    <mrow>
      <mfrac>
        <mrow>
          <mo stretchy="false">(</mo>
          <mi>n</mi>
          <mo>−</mo>
          <mn>1</mn>
          <mo stretchy="false">)</mo>
          <mo>×</mo>
          <mi>n</mi>
        </mrow>
        <mn>2</mn>
      </mfrac>
    </mrow>
  </semantics>
</math>

使用以下代码替换(根据 Rufus L 的建议更改了代码):

string newStr = File.ReadAllText(path to image01.xml);
span.InnerHtml = newStr;

替换后,嵌入的 MathML 不一样了——&lt;mo&gt;−&lt;/mo&gt; 变成了&lt;mo&gt;?&lt;/mo&gt;

<math>
  <semantics>
    <mrow>
      <mfrac>
        <mrow>
          <mo stretchy="false">(</mo>
          <mi>n</mi>
          <mo>?</mo>
          <mn>1</mn>
          <mo stretchy="false">)</mo>
          <mo>×</mo>
          <mi>n</mi>
        </mrow>
        <mn>2</mn>
      </mfrac>
    </mrow>
  </semantics>
</math>

我的代码有什么问题?我会非常感激任何帮助。

==============================================================

更新: newStr 是(来自 Debug,减号仍然存在):

"<math>\r\n  <semantics>\r\n    <mrow>\r\n      <mfrac>\r\n        <mrow>\r\n          <mo stretchy=\"false\">(</mo>\r\n          <mi>n</mi>\r\n          <mo>−</mo>\r\n          <mn>1</mn>\r\n          <mo stretchy=\"false\">)</mo>\r\n          <mo>×</mo>\r\n          <mi>n</mi>\r\n        </mrow>\r\n        <mn>2</mn>\r\n      </mfrac>\r\n    </mrow>\r\n  </semantics>\r\n</math>"

检索span的代码是:

var spans = doc.DocumentNode.SelectNodes("//span[img]");
foreach (HtmlNode span in spans)
{
    // handle span here
}

【问题讨论】:

  • 为什么要在整个字符串上调用Replace 方法呢?此代码将更具可读性:span.InnerHtml = newStr;
  • 为什么没有显示用于newStr 的值以及如何获得span 的值?
  • @luuk 我敢打赌这不会真正有帮助,因为错误在于保存代码......这也没有出现在帖子中。
  • @Luuk, newStr is "\r\n \r\n \r\n \r\n \r\n (\r\n n\r\n -\r\n 1 \r\n )\r\n ×\r\n n\r\n \r\n 2\r\n \r\n \r\n \r\n"

标签: c# html-agility-pack


【解决方案1】:

如何将跨度处理为:

var mo = span.SelectNode("//mo")
if (mo.innerText=="-") { mo.innerText = "?"; }

(未经测试...)

【讨论】:

  • 谢谢,但是'-'符号是从docx动态解析的,硬编码可能不是一个好的解决方案,我更深入地研究了代码,发现'-'原来是一个'−'在 xml 中,在我操作 xml 并使用 XmlDocument 保存后,'−'更改为“-”,使用 HtmlAgilityPack 替换后,它更改为“?”。
  • 大声笑,您的问题(再次)缺少该信息。另一个例子(一般来说)“三思而后行”!
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 2019-05-01
  • 2017-09-07
  • 2018-11-18
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多