0

主に Web サイトやその他のアプリケーション向けの xml パーサーの書き方について、すでに多くの質問が寄せられています。

次のような有用であることが証明されている他のチュートリアルもあります。

http://www.switchonthecode.com/tutorials/xml-parsing-with-jquery

ただし、ファイル形式 sbml (システム生物学マークアップ言語) のパーサーを作成しようとしています。

仕様 - http://sbml.org/Documents/Specifications

私はパーサーをハードコーディングしようとしてきましたが、私が持っているケースでは機能しますが、すべてのセクションでは機能しません。

$(document).ready(function()
    {
    //alert("In function");
      $.ajax({
        type: "GET",
        url: "sbml.xml",
        dataType: "xml",
        success: parseXml

      });

    });

    function parseXml(xml) {
        //alert("Xml loaded");
        $("#output").append("Output loaded <br />" );
        $(xml).find("model").each(function() {

            $("#output").append("Found model <br />" );
            //alert("Found model");
            //alert($(this).attr("id"));
            $(xml).find("listOfCompartments").each(function() {
                //alert("Found list of compartments");
                $("#output").append("List of Compartments found <br />" );
                $.each($(this).children(), function() {
                    var id = $(this).attr("id");
                    var size = $(this).attr("size");
                    //alert("Id: " + id + ", Size: " + size);
                    $("#output").append("Compartment <br />" );
                    $("#output").append("Id: " + id + ", Size: " + size + "<br />");
                });
          });

      });
    }

仕様は非常に大きく (8 ページ)、変更される傾向があるため、そのような場合のパーサーを作成するためのより良い方法はありますか?

すべてをハードコーディングするのではなく、可能なすべてのノードの配列を作成してループスルーすることは可能でしょうか。これはより効率的でしょうか?

4

2 に答える 2

1

ブラウザは XML を解析できます。ブラウザーの XML 解析はおそらく正しいので、dom を操作するだけです。

于 2011-02-10T16:51:24.373 に答える
1

代替手段がない場合を除き、XML パーサーを作成しないでください。XML 仕様 (パラメーター エンティティ、内部サブセットなど) には、取り組む必要があり、非常に複雑なことがたくさんあります。すべての言語には常に優れたパーサーがあり、それらのいずれかを使用する必要があります。

自分で作成すると、仕様の一部のみを実装するパーサーを作成することになります。将来的には確実に壊れ、それはあなたとあなたの協力者に問題を引き起こすだけです.

更新: 解析と DOM の操作を区別します。XML を解析するのではなく、ブラウザに解析してもらいたい (そうすることになる)。おそらくXPathを使用して、DOMを操作したい。

更新: 私は専門家ではありませんが、MS 環境でのパーサーのかなり最近の例を次に示します。

XML Parser in Microsoft Browser:
Microsoft’s XML parser is a COM component that comes with Internet Explorer 5 and higher. To load the XML Parser in JavaScript will have to follow series of steps.

    1. Create instance of XML Parser:

    <script type="text/javascript">  
         var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    </script>

    This will load the xml parser in the memory and will wait for the xml document. This component will automatically get erased when you close the browser window or the Browser. Here the xmlDoc holds the XML Object for JavaScript.

他のブラウザにも同様のパーサーがあります。

UPDATE3:「CML 用のパーサーを作成しました...」? あまり。私は 1997 年に XML とそのパーサーの開発に参加しました (Norbert Mikula、Tim Bary など)。実際、XML の解析が困難なため、XML を再設計しました。

XML パーサーは、SAX イベント ストリームまたは DOM のいずれかを作成します。理論的には、すべてのパーサーが同じものを作成する必要があります。これはインフォセットと呼ばれます。XML のすべての構文のバリエーション (引用、CDATA、エンティティなど) が削除されました。これは一般に DOM と呼ばれます。

「情報セットを自分のアプリケーションに特化したものに変える方法」という意味だと思いますか?もしそうなら、はい - 生の情報セットを操作するための広範なコードを書きました。私の場合は、XML 要素の特殊なサブクラスを作成することです。したがって、CMLMolecule、CMLAtom などがあります。コードは JUMBO (CMLXOM) https://bitbucket.org/wwmm/cmlxomです。

これは、(たとえば) MathML や SVG で採用されているのと同じ哲学です。これらには特殊なサブクラスがあります。

それはかなりの作業です - 私は自動と手作りの両方のアプローチを使用しました. 私はベースとして W3CDom が好きではないので、Element をサブクラス化できる DOM をお勧めします。しかし、決定的な SBML Javascript DOM を作成するつもりなら、私はあなたを落胆させません。

少し前にJavascriptでCMLに対してこれを行いましたが、ブラウザには不安定なDOMがあり、これを再検討する必要があるかもしれません. インタラクティブなグラフィックスを行うには、ほとんど不可欠です。

あなたからのお便りを楽しみにしています

于 2011-02-10T16:48:28.957 に答える