0

私の課題は、xml コンテンツをグループに区別することです。たとえば、2 つの xml ファイルがあります。

<?xml version="1.0"?>
<marks>
<firstname>john</firstname>
<lastname>peter</lastname>
<subject name="english" marks="30">pass</heading>
</marks>

<?xml version="1.0"?>
<marks>
<firstname>james</firstname>
<lastname>cameron</lastname>
<subject name="english" marks="30" degree="masters">pass</heading>
</marks>

したがって、上記の xml ファイルの例を解析し、それらをグループに分割して、修士課程の学生、博士課程の学生、学士課程の学生の数を計算する必要があります。

各グループには、要素セクションに追加のプロパティがあります。たとえば、修士課程の学生の場合、「サブジェクト要素」には、博士課程の学生の場合はプロパティの学位があり、専門のプロパティになります。

私はxmlファイルのプロパティを取得し、それをc関数でコーディングして、プロパティ名の学位を持っている場合、それらを修士課程の学生と見なすことができますが、xmlリクエストに基づいてDTDを構築し、libxml2を使用して検証するなどの他の方法はありますか? DTDと差別化リクエスト(libxml2ライブラリを使用して把握する必要がありますが、まだわかりません)

さまざまな種類の xml 要求の数が増えるにつれて、複数の if ループを記述してそれらをハードコーディングすることはできません。

特定のタイプのリクエストに対してdtdを作成し、1行のコードを使用してそのリクエストに対して検証することは可能ですが、今では本当に可能です..

あなたの考えを聞かせてください。

4

1 に答える 1

0

タイトルで与えられた質問を理解しています:「c で libxml2 xml parse を使用して、DTD に基づいて xml を検証する方法」。それに答えるのはとても簡単です。これは、実際にはlibxml2 を使用した Dtd 検証の複製であり、そのためクローズする必要があります。

しかし、説明が続き、質問がまったく異なることがわかりました。おそらく、プロジェクトの設計に関して何らかの支援が必要になるでしょう。タイトルちょっと変えた方がいいのかな?

ifあなたのデザインに関して: sを使いたくないのはなぜですか? アプリを再コンパイルせずに変更できるようにしたいですか? したがって、すべてのケースを構成ファイルに書き留める必要があります。ファイルを読んで、それに応じて行動してください。

デザイン部分に答えようとしています:

リクエストの種類ごとに個別の dtd を使用することもできますが、すべての dtd に対して順番に xml を検証する必要があります。パフォーマンス コストが許容できる場合は、この方法を使用できます。すべての dtds (または xsd スキーマ) は、初期化フェーズでメモリに読み込まれ、検証されるまで xml サンプルに対して試行されます。

xml の特定の要素に特定の属性が含まれているかどうかを調べるには、libxml の XPath を使用することもできます。この質問XPath の例を参照してください。xmlXPathEvalExpression の使用法に注意してください。

于 2012-09-23T17:02:56.423 に答える