2009-04-01 20 views
0

基本的に私はXML文書を持っていますが、ドキュメントについて知っているのは属性名だけです。javascriptを使用した汎用XML属性の正規表現

この情報があれば、その属性名が存在するかどうかを調べなければなりません。存在する場合、属性値を知る必要があります。例えば

<xmlroot> 
    <ping zipcode="94588" appincome = "1750" ssn="987654321" sourceid="XX9999" sourcepw="ioalot"> 
    <status statuscode="Success" statusdescription="" sessionid="1234" price="12.50"> 
    </status> 
</ping> 
</xmlroot> 

私は名前appincomeとのSourceIDを持っています。値は何ですか?

また、ドキュメントにappincome属性名が2つある場合は、そのことも知っておく必要がありますが、値は必要ありません。

+0

xml.match(/(?:sourceid =)["']。*?["']/ig) 私はこれだけを使っています。 – thirsty93

答えて

3

正規表現は、特にJSがXPathをサポートしている合理的に最新のブラウザで動作している場合には、これに最適なツールではない可能性があります。この正規表現は動作していますが、文書の内容を厳密に制御する必要がない場合は偽陽性に注意する必要があります。また

var match, rx = /\b(appincome|sourceid)\s*=\s*"([^"]*)"/g; 

while (match = rx.exec(xml)) { 
    // match[1] is the name 
    // match[2] is the value 

    // this loop executes once for each instance of each attribute 
} 

、偽陽性を生成しないであろう、このXPathを試してみてください。

var node, nodes = xmldoc.evaluate("//@appincome|//@sourceid", xmldoc, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); 

while (node = nodes.iterateNext()) { 
    // node.nodeName is the name 
    // node.nodeValue is the value 

    // this loop executes once for each instance of each attribute 
} 
+0

xpathはsoap xml文書で動作しますか? – thirsty93

+0

私はSOAPに精通していませんが、あなたのXMLを含むDOM Documentオブジェクトを持っている限り、これはうまくいくはずです(これを少し明確にするためにコードを編集しました)。 –

+0

+1はxpathソリューションです。 – elo80ka

関連する問題