0

次のように、別のxmlと比較してxmlの属性値を取得しようとしています。

xmlData1変数には次のようなxmlがあります--->

<Root>
  <RNA A="100" x="table1" y="car11"/>
  <RNA A="101" x="table2" y="car12"/>
  <RNA A="102" x="table3" y="car13"/>
  <RNA A="103" x="table4" y="car14"/>
  <RNA A="104" x="table5" y="car15"/>
  <RNA A="105" x="table6" y="car16"/>
  <RNA A="106" x="table7" y="car17"/>
  <RNA A="107" x="table8" y="car18"/>
  <RNA A="108" x="table9" y="car19"/>
</Root>

xmlData2変数には--->のようなxmlがあります

<Ina>
  <RNA B="100" x="table1" y="car11"/>
  <RNA B="101" x="table2" y="car12"/>
  <RNA B="102" x="table3" y="car13"/>
</Ina>

ここで私は次のように比較する必要があります

if(xmlData1.getAttribute(x)==xmlData2.getAttribute(x) then
//code goes

これを達成する方法???助けてください

4

3 に答える 3

0

jQueryを使用してXMLを解析できます。

var result1 = $(xmlData1)
var result2 = $(xmlData2)

次に、jQueryを使用してXML内を検索/比較できます。

if (result1.find('RNA[A=100]').attr ('x') == result2.find('RNA[B=100]').attr('x'))
{
   //do stuff
}
于 2012-09-18T11:00:39.493 に答える
0

XMLの違いを見つけるには、PrettyDiffを使用してみてください。属性が異なる順序であり、空白が完全に一貫していない場合でも、これはすべてあなたのために行われます。

これが、凝ったツールなしでこれを行う方法です。

var comparexml = function (x, y) {
        var a = (typeof DOMParser === "function") ? true : false,
            b = [],
            c = [],
            d = 0,
            e = 0,
            f = 0,
            g = function () {},
            h = {},
            i = {};
        if (a) {
            g = new DOMParser();
            b = g.parseFromString(x, "application/xml").getElementsByTagName("RNA");
            c = g.parseFromString(y, "application/xml").getElementsByTagName("RNA");
        } else {
            g = new ActiveXObject("Microsoft.XMLDOM");
            g.async = false;
            h = g.loadXML(x);
            i = g.loadXML(y);
            b = h.getElementsByTagName("RNA");
            c = i.getElementsByTagName("RNA");
        }
        d = Math.min(b.length, c.length);
        for (e = 0; e < d; e += 1) {
            for (f = 0; f < d; f += 1) {
                if (b[e].getAttribute("a") === c[f].getAttribute("b")) {
                    if (b[e].getAttribute("x") === c[f].getAttribute("x")) {
                        //your special logic goes in here
                    }
                    break;
                }
            }
        }
    };

このコード例はクロスブラウザでは機能しない可能性があるため、PrettyDiffのような派手なツールをお勧めします。

于 2012-09-18T11:34:47.107 に答える
-1

とてもシンプルです。まず、xmlを解析します。実際、あなたのニーズにかなりよく合うXブラウザ関数をまとめました。ここで見つけることができます
この行のコメントを外します:

keep.push(parsed);//last element of array is the full DOM

そのように呼んでください:

var data1 = parseXML(xml1,'RNA','x');//xml1 is the first xml string
var data2 = parseXML(xml2,'RNA','x');//xml2 === second xml string
var xml1Parsed = data1.splice(-1);//assign document to variable
var xml2Parsed = data2.splice(-1);
//get the nodes of intrest
var RNA1 = xml1Parsed.getElementsByTagName('RNA');
var RNA2 = xml2Parsed.getElementsByTagName('RNA');

両方ともdata1配列data2になりました。それらを繰り返し処理するだけです。

for (var i=0;i<data1.length;i++)
{
    if (data1[i] === data2[i])//attribute x is the same
    {//check whatever you need
        if (RNA1[i].getAttribute('y') === RNA2[i].getAttribute('y'))
        {
            console.log('node ' + i + ' is alike');//do stuff
        }
    }
}

完全性と明確さのために、これはこの例で使用されている関数です。

var parseXML = (function(w,undefined)
{
    'use strict';
    var parser,i,ie,parsed;
    ie = false;
    switch (true)
    {
        case w.DOMParser !== undefined:
            parser = new w.DOMParser();
        break;
        case new w.ActiveXObject("Microsoft.XMLDOM") !== undefined:
            parser = new w.ActiveXObject("Microsoft.XMLDOM");
            parser.async = false;
            ie = true;
        break;
        default :
            throw new Error('No parser found');
    }
    return function(xmlString,getTags,getAttr)
    {
        var tags,keep = [];
        if (ie === true)
        {
            parser.loadXML(xmlString);
            parsed = parser;
        }
        else
        {
            parsed = parser.parseFromString(xmlString,'text/xml');
        }
        tags = parsed.getElementsByTagName(getTags);
        for(i=0;i<tags.length;i++)
        {
            if (!getAttr || getAttr === 'textContent')
            {
                keep.push(tags[i].textContent);
                continue;
            }
            if (getAttr && tags[i].getAttribute(getAttr))
            {
                keep.push(tags[i].getAttribute(getAttr));
            }
        }
        keep.push(parsed);//last element of array is the full DOM
        return keep;
    }
})(this);//assuming global declaration, if not: replace with window
于 2012-09-18T11:06:05.477 に答える