Javascript 解析xml以获取要返回给python的等式

Javascript 解析xml以获取要返回给python的等式,javascript,python,xml,parsing,mathml,Javascript,Python,Xml,Parsing,Mathml,这是一个javascript文件,它将xml文件转换为文本。这个文本通常是等式。我希望这个等式能够使传递给python的xml结果产生所需的结果。任何帮助都是值得赞赏的 function getDOM(xmlstring) { parser=new DOMParser(); return parser.parseFromString(xmlstring, "text/xml"); } function remove_tags(node) { var result = ""

这是一个javascript文件,它将xml文件转换为文本。这个文本通常是等式。我希望这个等式能够使传递给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);
}
函数getDOM(xmlstring){ parser=新的DOMParser(); 返回parser.parseFromString(xmlstring,“text/xml”); } 函数删除_标记(节点){ var结果=”; var nodes=node.childNodes; 变量标记名=节点标记名; 如果(!nodes.length){ 如果(node.nodeValue==“π”)结果=“π”; 如果(node.nodeValue==“”)结果为“”,则为else; else结果=node.nodeValue; }else if(标记名==“mfrac”){ 结果=“(“+remove_标记(节点[0])+”/(“+remove_标记(节点[1])+”)”; }else if(标记名==“msup”){ result=“Math.pow”(“+remove_标记(节点[0])+”),(“+remove_标记(节点[1])+”); }(变量i=0;i xml文件的示例是

s = stringifyMathML(" <math><mi>sin</mi><mfenced><mi>x</mi></mfenced></math>");
        alert(s);
        alert(eval(s));
s=stringifyMathML(“sinx”);
警报;
警报(评估);
我希望输出是
math.sin(x)

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

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

然后,如果遇到此操作,请在其前面加“.math”

var mList=['pow','sin','cos','pow','sqrt','π'];
函数getDOM(xmlstring){
parser=新的DOMParser();
返回parser.parseFromString(xmlstring,“text/xml”);
}
函数删除_标记(节点){
var结果=”;
var nodes=node.childNodes;
变量标记名=节点标记名;
如果(!nodes.length){
if(mList.indexOf(node.nodeValue)!=-1){
结果+=“数学”
}
如果(node.nodeValue==“π”)结果+=“π”;
如果(node.nodeValue==“”)结果+=“”,则为else;
else result+=node.nodeValue;
}else if(标记名==“mfrac”){
结果+=“(“+remove_标记(节点[0])+”/”(“+remove_标记(节点[1])+”)”;
}else if(标记名==“msup”){
结果+=“pow(“+移除_标记(节点[0])+”),(“+移除_标记(节点[1])+”)”;
}(变量i=0;i
输出

x对x

x+5对x+5

math.sin(x)与math.sin(x)


@Baart我在第25行输入了这个值,如果(标记名==“sin”){result=“math.sin”(+remove_tags(nodes[0])+”);现在的结果是“sin(x)”,对吗?您缺少了“math”部分?是的,我需要数学。part@Barrt,但当我将输入作为x时,我得到的输出是math.x。仅对于trignometry,我应该得到一个数学。附件可以添加更多相关的测试/输入吗?为什么使用“math.sqrt”使用较高的M?如何处理输出?@bratt M是一个错误,它应该是较小的minput x输出:x输入x+5输出:x+5。输入sinx输出sin(x)。输入为mathml格式
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)');