2008-09-17 5 views
16

XMLデータを解析するための優れたJavaScriptライブラリを探しています。ブラウザに組み込まれたXML DOM parsersビルトインよりもはるかに使いやすいはずです。JavaScriptのXMLパーサー

私は少しJSONで作業していて、XMLのための類似の行を楽しみにしています。

+0

高性能のために[fast xml parser](https://github.com/NaturalIntelligence/fast-xml-parser)を作成しました。 –

答えて

6

私はこれにjQueryを使用します。ここでは良い例です:

(EDIT:注意 - 次のブログがなくなっているようだ。)

http://blog.reindel.com/2007/09/24/jquery-and-xml-revisited/

jQueryドキュメントの良い例のとてもたくさんもあります

http://www.webmonkey.com/tutorial/Easy_XML_Consumption_using_jQuery?oldid=20032

EDIT:私の主な例題のブログのために、基本を示し、名前空間の問題に役立つもう1つの例を追加したいと思います。

http://www.zachleat.com/web/selecting-xml-with-javascript/

+0

リネエルリンクが拉致されました。 – DuckMaestro

+1

ここにブログのミラーがあります:http://web.archive.org/web/20080110113712/http://blog.reindel.com/2007/09/24/jquery-and-xml-revisited/ – brasofilo

+0

答えのPDF添付ファイルとしてブログの印刷物を含める?彼らはテキストをあまり明確にしないので、私は "編集"ノートを取り除くだろう。私は死んだリンクを削除し、ライブリンクでそれらを置き換えようとしました –

1

あなたがXML for SCRIPTを試してみました。私はそれを個人的に使用したことはないと認めなければなりませんが、それについていくつかの良いことを聞いたり読んだりしています。

ここにあなたの経験をお試しください。

48

免責事項:オープンソースJsonixライブラリがタスクに適している可能性がある場合、私は著者です。 JavaScriptのための> JSONパース/シリアライズライブラリ -


数年前、私はまた、良好なXML <を探していました。私はかなり複雑なXMLスキーマに準拠したXML文書を処理する必要がありました。

Is there a JavaScript API for XML binding - analog to JAXB for Java?

私は当時、このようなツールを見つけることができませんでした:私は似たような探していたので、Javaでは、私は日常のタスクにJAXBを使用しています。

私はJsonixを書きました。JavaScriptのJAXBアナログと考えています。

あなたは、適切なJsonix、あなたは以下の機能に興味があるなら見つけることがあります。

  • XML < - > JSON変換がこの
  • XMLとJSON構造の間declaraiveマッピングに基づいていますは、XMLスキーマから生成された、または手動で書かれた にすることができます。
  • 双方向 - 構文解析とシリアル化(または他の点ではアンマーシャリング/マーシャリング)をサポートしています。
  • サポート要素属性ともXML文書で定義された名前空間は考えています。
  • 厳密に入力されています。
  • 厳密に構造化されています。
  • XMLスキーマの組み込みタイプ(ほとんどの場合、QNameのような特別なタイプを含む)をサポートします。
  • ブラウザで作品だけでなく、(また、Node.jsの中amdefineへ)RequireJS/AMDにも互換性のNode.js
  • extensive documentationを持っています。

しかし、Jsonix は、あなたのXMLはかなり単純であれば、XMLスキーマを持っていないか、厳密な型または構造に興味を持っていないのであればない、やり過ぎかもしれません。要件を確認してください。

それin JSFiddleを試してみてください。

あなたはpurchase order schemaを取って、次のコマンドを使用して、そのためのマッピングを生成することができます

java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar 
    -d mappings -p PO purchaseorder.xsd 

あなたがXMLとJavaScript構造の間のマッピングを説明していPO.jsファイルを取得します。ここではあなたの印象を与えるために、このマッピングファイルからの抜粋だ:

このマッピングファイルを持つ
var PO = { 
    name: 'PO', 
    typeInfos: [{ 
     localName: 'PurchaseOrderType', 
     propertyInfos: [{ 
      name: 'shipTo', 
      typeInfo: 'PO.USAddress' 
     }, { 
      name: 'billTo', 
      typeInfo: 'PO.USAddress' 
     }, { 
      name: 'comment' 
     }, { 
      name: 'orderDate', 
      typeInfo: 'Calendar', 
      type: 'attribute' 
     }, ...] 
    }, { 
     localName: 'USAddress', 
     propertyInfos: [ ... ] 
    }, ...], 
    elementInfos: [{ 
     elementName: 'purchaseOrder', 
     typeInfo: 'PO.PurchaseOrderType' 
    }, ... ] 
}; 

あなたはXMLを解析することができます

// First we construct a Jsonix context - a factory for unmarshaller (parser) 
// and marshaller (serializer) 
var context = new Jsonix.Context([PO]); 

// Then we create a unmarshaller 
var unmarshaller = context.createUnmarshaller(); 

// Unmarshal an object from the XML retrieved from the URL 
unmarshaller.unmarshalURL('po.xml', 
    // This callback function will be provided 
    // with the result of the unmarshalling 
    function (unmarshalled) { 
     // Alice Smith 
     console.log(unmarshalled.value.shipTo.name); 
     // Baby Monitor 
     console.log(unmarshalled.value.items.item[1].productName); 
    }); 

またはあなたのJavaScriptオブジェクトをXMLとしてシリアライズ:

// Create a marshaller 
var marshaller = context.createMarshaller(); 

// Marshal a JavaScript Object as XML (DOM Document) 
var doc = marshaller.marshalDocument({ 
    name: { 
     localPart: "purchaseOrder" 
    }, 
    value: { 
     orderDate: { year: 1999, month: 10, day: 20 }, 
     shipTo: { 
      country: "US", 
      name: "Alice Smith", 
      street: "123 Maple Street", 
      city: "Mill Valley", 
      state: "CA", 
      zip: 90952 
     }, 
     billTo: { /* ... */ }, 
     comment: 'Hurry, my lawn is going wild!', 
     items: { /* ... */ } 
    } 
}); 

in JSFiddleを試して実際の動作を確認できます。


追加免責事項:この答えがあるため、メタ上following discussionの高投票です。 「メタ効果」に注意してください。ここでの高い評価は、必ずしもJsonixがコミュニティによって良い、適用可能、または推奨されているとは限りません。高得票で誤解しないでください。