16

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

私はJSONでの作業に少し甘やかされており、XMLの同様の行で何かを楽しみにしています。

4

4 に答える 4

48

免責事項:私は、タスクに適したオープンソースのJsonixライブラリの作成者です。


数年前、私は JavaScript 用の優れた XML<->JSON 解析/シリアライゼーション ライブラリも探していました。かなり複雑な XML スキーマに準拠した XML ドキュメントを処理する必要がありました。Java では、タスクにJAXBを日常的に使用しているため、同様のものを探していました。

XML バインディング用の JavaScript API はありますか? Java 用の JAXB に類似していますか?

当時、そのようなツールを見つけることができませんでした。

そこで私は、JavaScript の JAXB アナログであると考えるJsonixを作成しました。

次の機能に興味がある場合は、Jsonixが適しているかもしれません。

  • XML<->JSON 変換は、XML と JSON 構造の間の宣言的なマッピングに基づいています
  • このマッピングは、XML スキーマから生成することも、手動で記述することもできます
  • 双方向- 解析とシリアライゼーション (またはアンマーシャリング/マーシャリング) をサポートします。
  • 要素属性をサポートし、XML ドキュメントで定義された名前空間も考慮します。
  • 厳密に入力します。
  • 厳密に構成されています。
  • ほぼすべてのXML スキーマ組み込み型( のような特殊な型を含むQName) をサポートします。
  • Node.jsだけでなくブラウザーでも動作し、 RequireJS / AMDとも互換性があります( Node.jsにも対応)amdefine
  • 豊富なドキュメントがあります。

ただし、 XML がかなり単純な場合、XML スキーマがない場合、または厳密な型指定や構造に関心がない場合、Jsonix はやり過ぎかもしれません。要件を確認してください。

JSFiddle で試してみてください。

次のコマンドを使用して、発注書スキーマを取得し、そのマッピングを生成できます。

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

PO.jsXML と JavaScript 構造の間のマッピングを記述したファイルが得られます。印象を与えるために、このマッピング ファイルのスニペットを次に示します。

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: { /* ... */ }
    }
});

JSFiddle で試して、実際にどのように機能するかを確認できます。


追加の免責事項:メタに関する次の議論のため、この回答は高投票です。そのため、「メタ効果」に注意してください。ここでの高い投票は、必ずしも Jsonix が優れている、適用可能である、またはコミュニティによって推奨されていることを意味するものではありません。投票数の多さに惑わされないでください。

于 2014-11-16T13:19:43.867 に答える
6

これにはjQueryを使用します。良い例を次に示します。

(編集: 注 - 次のブログは削除されたようです。)

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

また、 jQueryのドキュメントには、非常に多くの良い例があります。

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

編集:私の主要な例のブログがなくなったため、基本を示し、名前空間の問題に役立つ別の例を追加したかった:

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

于 2008-09-17T13:58:43.833 に答える
2

XMLが単純な形式の場合は、jQueryとXMLtoJSONプラグインまたはxmlObjectifierを確認できます。

ストレートパーサーの場合、<SCRIPT>のXMLを確認することをお勧めします。

于 2008-09-17T14:03:48.940 に答える
1

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

それを試してみて、多分ここであなたの経験を共有しますか?

于 2008-09-17T14:03:08.020 に答える