javascript - 解析 xml 以获取要返回给 python 的方程

标签 javascript python xml parsing mathml

这是一个将 xml 文件转换为文本的 javascript 文件。该文本通常是方程式。我希望该方程式能够使传递给 python 的 xml 结果产生所需的结果。任何帮助都是值得赞赏的。

function getDOM(xmlstring) {
    parser=new DOMParser();
    return parser.parseFromString(xmlstring, "text/xml");
}
function remove_tags(node) {
    var result = "";
    var nodes = node.childNodes;
    var tagName = node.tagName;
    if (!nodes.length) {
        if (node.nodeValue == "π") result = "pi";
        else if (node.nodeValue == " ") result = "";
        else result = node.nodeValue;
    } else if (tagName == "mfrac") {
        result = "("+remove_tags(nodes[0])+")/("+remove_tags(nodes[1])+")";
    } else if (tagName == "msup") {
        result = "Math.pow(("+remove_tags(nodes[0])+"),("+remove_tags(nodes[1])+"))";
    } else for (var i = 0; i < nodes.length; ++i) {
        result += remove_tags(nodes[i]);
    }
    if (tagName == "mfenced") result = "("+result+")";
    if (tagName == "msqrt") result = "Math.sqrt("+result+")";
    return result;
}
function stringifyMathML(mml) {
   xmlDoc = getDOM(mml);
   return remove_tags(xmlDoc.documentElement);
}

xml 文件的示例是

s = stringifyMathML(" <math><mi>sin</mi><mfenced><mi>x</mi></mfenced></math>");
        alert(s);
        alert(eval(s));

我期望输出是 ma​​th.sin(x)

最佳答案

添加特定的 .math 部分将解决该问题:

“数学”。仅当存在特殊关键字时才必须添加部分。 因此,首先,构建您需要在列表 (mList) 中涵盖的潜在操作

然后,如果遇到这个运算,就在前面加上“.math”

var mList = ['pow', 'sin', 'cos', 'pow', 'sqrt', 'π'];

function getDOM(xmlstring) {
    parser=new DOMParser();
    return parser.parseFromString(xmlstring, "text/xml");
}
function remove_tags(node) {
    var result = "";
    var nodes = node.childNodes;
    var tagName = node.tagName;
    if (!nodes.length) {
        if(mList.indexOf(node.nodeValue) != -1 ) {
            result += 'math.'
        }
        if (node.nodeValue == "π") result += "pi";
        else if (node.nodeValue == " ") result += "";
        else result += node.nodeValue;
    } else if (tagName == "mfrac") {
        result += "("+remove_tags(nodes[0])+")/("+remove_tags(nodes[1])+")";
    } else if (tagName == "msup") {
        result += "pow(("+remove_tags(nodes[0])+"),("+remove_tags(nodes[1])+"))";
    } else for (var i = 0; i < nodes.length; ++i) {
        result += remove_tags(nodes[i]);
    }
    if (tagName == "mfenced") result = "("+result+")";
    if (tagName == "msqrt") result = "sqrt("+result+")";

    console.log('returning', result)
    return result;
}
function stringifyMathML(mml) {
   xmlDoc = getDOM(mml);
   return remove_tags(xmlDoc.documentElement);
}

a = stringifyMathML("<math><mi>x</mi></math>");
b = stringifyMathML("<math><mi>x</mi><mo>+</mo><mn>5</mn></math> ");
c = stringifyMathML("<math><mi>sin</mi><mfenced><mi>x</mi></mfenced></math> ");


console.log(a, 'vs x');
console.log(b, 'vs x+5');
console.log(c, 'vs math.sin(x)');

输出

x vs x

x+5 vs x+5

math.sin(x) vs math.sin(x)

关于javascript - 解析 xml 以获取要返回给 python 的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451491/

相关文章:

javascript - 使用 Javascript 通过单击按钮获取表格单元格元素

javascript - Jquery 复选框选中和取消选中效果不佳

Python嵌套json对象被序列化为str

java - 映射到列表转换

php - javascript 获取 php 变量不起作用

javascript - 你能说出为什么 javascript 函数没有在 profile.php 的提交按钮中执行吗

python - 在 Pandas 中使用 np.nan 进行 bool 索引的逻辑运算符

python - django 使用 html 按钮删除对象

java - 如何在不使用 XML 的情况下在 Android 中的 Canvas 元素上显示广告?

xml - 与多行 XML 案例匹配的模式