2012-02-06 12 views
0

xmlノードに属性を追加しようとしています。私は次の関数を作成しましたXMLノード:名前空間を持つ属性を追加します。

function AddAttribute(xmlNode, attrname, attrvalue, path) { 
    var attr; 
    if (isIE()) 
     attr = xmlNode.ownerDocument.createNode(2, attrname, "http://mydomain/MyNameSpace"); 
    else 
     attr = xmlNode.ownerDocument.createAttributeNS("http://mydomain/MyNameSpace", attrname); 

    attr.nodeValue = attrvalue; 
    var n = xmlNode.selectSingleNode(path); 
    n.setAttributeNode(attr); 
} 

このコードはFirefoxでは動作しません。ノードを追加しますが、名前空間は追加されません。 私はIEとChromeで試してみましたが、正常に動作します。

名前空間を追加するにはどうすればよいですか? また、名前空間を持つ属性を作成する他の方法も知っていますか?

ありがとうございました

+0

あなたは 'attrname'として何を渡しますか? – Tomalak

+0

私は次のように渡します: "co:internalcollectiontype" – SergioKastro

+0

私は解決策を見つけました(恐らく最良のものではありません)。私は答えとして投稿することはできません、私は8時間待つ必要があります。それまではここに私のコメントがあります: var n = xmlNode.selectSingleNode(path); if(cb.browser.ie)// IE n.setAttributeNode(attr); else n.setAttributeNodeNS(attr); – SergioKastro

答えて

1

解決策が見つかりました。少なくともIE、Firefox、Chromeの3つのブラウザで動作します。

function AddAttribute(xmlNode, attrname, attrvalue, path) { 
    var attr; 
    if (xmlNode.ownerDocument.createAttributeNS) 
     attr = xmlNode.ownerDocument.createAttributeNS("http://www.firmglobal.com/MyNameSpace", attrname); 
    else 
     attr = xmlNode.ownerDocument.createNode(2, attrname, "http://www.firmglobal.com/MyNameSpace"); 

    attr.nodeValue = attrvalue; 
    var n = xmlNode.selectSingleNode(path); 

    //Set the new attribute into the xmlNode 
    if (n.setAttributeNodeNS) 
     n.setAttributeNodeNS(attr); 
    else 
     n.setAttributeNode(attr); 
} 

彼の助けを借りて「Tomalak」に感謝します。

関連する問題