通过 javascript 进行 XML 条件解析



>我有以下xml文件,我正在尝试提取一些元素

<entry>
    <form>
        <orth>Agathe</orth>
        <pron>agat</pron>
    </form>
    <gramGrp>
        <pos>n</pos>
    </gramGrp>
    <sense>
        <cit type="trans">
            <quote>Agatha</quote>
        </cit>
    </sense>
</entry>
<entry>
    <form>
        <orth>Aix-la-Chapelle</orth>
    </form>
    <gramGrp>
        <pos>n</pos>
    </gramGrp>
    <sense>
        <cit type="trans">
            <quote>Aix-la-Chapelle</quote>
        </cit>
    </sense>
</entry>

我已经提取了所有元素,但我只需要那些在 pos 元素中有 n 的元素。

function parseWordsAlt(xml) {
    // this reads the XML and puts the whole structure in the variable xmlDoc
    var xmlDoc = xml.responseXML;
    // this takes all the entries which has tag names orth
    var resultOrth = xmlDoc.getElementsByTagName("orth");
    // this takes all the entries which has tag names orth
    var resultTranslation = xmlDoc.getElementsByTagName("quote");
    // cycles through the first n tags named orth
    var n=20;
    for (var i=0;i<n;i++) {
        for (var j=0;j<n;j++) {
            var resultWord1=resultOrth[i].childNodes[0].nodeValue;
            var resultWord2=resultTranslation[j].childNodes[0].nodeValue;
        }
    }
}

我很抱歉我的糟糕行话,但我是新手。你能帮我这个吗?

有一些

细节我们不知道,作为您正在使用的环境,但在这里您有一个小的概念证明,可以帮助您获得解决方案:检查每个条目,如果它满足您的条件,则取您需要的值:

var xml=document.getElementById("xml").innerHTML;
function parseWordsAlt(xmlDoc) {
    
    // this takes all the entries
    var entries = xmlDoc.getElementsByTagName("entry");
    for (var i=0;i<entries.length;i++) {
      var pos=entries[i].getElementsByTagName("pos");
      if (pos[0].textContent==="n") {
         var orth = entries[i].getElementsByTagName("orth")[0].textContent;
         var quote = entries[i].getElementsByTagName("quote")[0].textContent;
         console.log(`${orth},${quote}`);
      }
    }
}
parseWordsAlt(new DOMParser().parseFromString(xml, "text/xml"));
<template id="xml">
<entries>
<entry>
    <form>
        <orth>Agathe</orth>
        <pron>agat</pron>
    </form>
    <gramGrp>
        <pos>n</pos>
    </gramGrp>
    <sense>
        <cit type="trans">
            <quote>Agatha</quote>
        </cit>
    </sense>
</entry>
<entry>
    <form>
        <orth>Aix-la-Chapelle</orth>
    </form>
    <gramGrp>
        <pos>n</pos>
    </gramGrp>
    <sense>
        <cit type="trans">
            <quote>Aix-la-Chapelle</quote>
        </cit>
    </sense>
</entry>
</entries>
</template>

最新更新