【发布时间】:2020-02-18 16:49:12
【问题描述】:
我想用 MathML(image01.xml) 替换 <span><img src="images/image01.png></span>,如下所示:
<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 不一样了——<mo>−</mo> 变成了<mo>?</mo>
<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 ""
标签: c# html-agility-pack