0

私はこれまでXMLを使用したことがありません。単一のXMLファイルをSQLServerに送信しようとしています。SQLServerでは、(うまくいけば)分解してさまざまなテーブルに挿入できます。

私はテストを構築しています。したがって、各テストにはXの質問があり、各質問にはXの回答オプションと正解の1つの説明があります。次のXMLの例は有効ですか?私はそれを単純化する何かが欠けていますか?

<test>
    <testid>1</testid>
    <qablock>
        <question>
            <question_number>1</question_number>
            <question_text>What is 1 + 1?</question_text>
        </question>
        <explanation>It's 2.</explanation>
        <options>
            <option>
                <option_number>1</option_number>
                <option_value>1</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>2</option_number>
                <option_value>2</option_value>
                <is_correct>1</is_correct>
            </option>
            <option>
                <option_number>3</option_number>
                <option_value>3</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>4</option_number>
                <option_value>4</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>5</option_number>
                <option_value>5</option_value>
                <is_correct>0</is_correct>
            </option>
        </options>
    </qablock>
    <qablock>
        <question>
            <question_number>2</question_number>
            <question_text>What is 2 + 2?</question_text>
        </question>
        <explanation>It's 4.</explanation>
        <options>
            <option>
                <option_number>1</option_number>
                <option_value>1</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>2</option_number>
                <option_value>2</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>3</option_number>
                <option_value>3</option_value>
                <is_correct>0</is_correct>
            </option>
            <option>
                <option_number>4</option_number>
                <option_value>4</option_value>
                <is_correct>1</is_correct>
            </option>
            <option>
                <option_number>5</option_number>
                <option_value>5</option_value>
                <is_correct>0</is_correct>
            </option>
        </options>
    </qablock>
</test>
4

2 に答える 2

1

そこにあるのは完全に有効なXMLです。スキーマが関連付けられていません(つまり、構造を検証したり、使用する前に指定されたXMLファイルが期待どおりであることを確認したりできるため、予期しない結果が発生することはありません。

XMLヘッダーを追加できます-使用する文字セットをパーサーに指示するので役立ちます-ヘッダーで指定したエンコードでXMLファイルを保存することも確認してください(この点についてさらに説明が必要な場合はお知らせください) )。

最後に、あなたが持っているものは問題ありませんが、個人的には、XMLを少し違った方法で記述して、小さくて読みやすくします。そこには厳格なルールはありませんが、一般的に言えば、ファイルサイズを小さくすることは良いことであり、読みやすくすることは良いことです。

最後に、おそらくこれをテスト要素でラップします。そうすれば、一度に複数のテストをアップロードしたい場合は簡単に実行できます(ただし、必要に応じて一度に1つのファイルにこれを使用することもできます)。これも難しいルールではありませんが、柔軟性を組み込むことは常に良いことです。

<?xml version="1.0" encoding="utf-8"?>
<tests>
    <test testid='1'>
        <qablock number='1'>
            <question>What is 1 + 1?</question>
            <explanation>It's 2.</explanation>
            <options>
                <option number='1' value='1' />
                <option number='2' value='2' correct='true' />
                <option number='3' value='3' />
                <option number='4' value='4' />
                <option number='5' value='5' />
            </options>
        </qablock>
        <qablock number='2'>
            <question>What is 2 + 2?</question>
            <explanation>It's 4.</explanation>
            <options>
                <option number='1' value='1' />
                <option number='2' value='2'/>
                <option number='3' value='3' />
                <option number='4' value='4' correct='true'  />
                <option number='5' value='5' />
            </options>
        </qablock>
    </test>
</tests>

お役に立てば幸いです。

- - - - - -編集 - - - - - - - -

これは、SQLのxmlデータ型を使用したこの例です。

declare @x xml

set @x = '<tests>
    <test testid=''1''>
        <qablock number=''1''>
            <question>What is 1 + 1?</question>
            <explanation>It''s 2.</explanation>
            <options>
                <option number=''1'' value=''1'' />
                <option number=''2'' value=''2'' correct=''true'' />
                <option number=''3'' value=''3'' />
                <option number=''4'' value=''4'' />
                <option number=''5'' value=''5'' />
            </options>
        </qablock>
        <qablock number=''2''>
            <question>What is 2 + 2?</question>
            <explanation>It''s 4.</explanation>
            <options>
                <option number=''1'' value=''1'' />
                <option number=''2'' value=''2''/>
                <option number=''3'' value=''3'' />
                <option number=''4'' value=''4'' correct=''true''  />
                <option number=''5'' value=''5'' />
            </options>
        </qablock>
    </test>
</tests>'

select @x.value('(/tests/test/qablock[@number=''2'']/question/text())[1]','nvarchar(max)') Question
, @x.value('(/tests/test/qablock[@number=''2'']/options/option[@correct=''true'']/@number)[1]','nvarchar(max)') Answer
于 2012-10-19T17:59:31.087 に答える
1

XMLを有効にする方法は2つあります

整形式

これは基本的に構文に関するものです(XMLは整形式であり、検証しました)。

ウィキペディアから

整形式のXMLはこれらのルールを尊重します

  1. 適切にエンコードされた有効なUnicode文字のみが含まれています。

  2. 「<」や「&」などの特殊な構文文字は、マークアップ描写の役割を実行する場合を除いて表示されません。

  3. 要素を区切るbegin、end、およびempty-elementタグは正しくネストされており、欠落しているものや重複しているものはありません。
  4. 要素タグでは大文字と小文字が区別されます。開始タグと終了タグは完全に一致する必要があります。タグ名には、! "#$%&'()* +、/; <=>?@ [] ^` {|}〜やスペース文字を含めることはできません。また、-、。、または数字。

  5. 他のすべての要素を含む単一の「ルート」要素があります。

ここでXMLをオンラインで検証できます

有効なXML

有効なXMLは、XMLのようなコンテンツに関するものであり、質問には少なくとも1つの説明が必要なようなものになります。

このためには、 DTDまたはスキーマが必要であり、それをオンラインで検証します

于 2012-10-19T18:00:01.063 に答える