这种XML格式是否正确?

时间:2012-10-19 17:48:06

标签: xml

我之前从未使用过XML。我正在尝试将单个XML文件发送到SQL Server,它将(希望)能够被解构并插入到各种表中。

我正在构建测试。因此,对于每个测试,有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>

2 个答案:

答案 0 :(得分:1)

你所拥有的是完全有效的XML。它没有关联的模式(即,您可以验证结构/确保您在使用之前给出的XML文件符合预期,因此您不会得到意外的结果。

您可以添加一个XML标头 - 这有助于告诉解析器使用哪个字符集 - 还要检查您是否使用标题中指定的编码保存XML文件(如果您需要更多解释,请告诉我们)在这一点上。)

最后,虽然你得到的很好,但我个人认为这个XML略有不同,以使它更小,更容易阅读。那里没有硬规则,但一般来说保持文件大小是好的并且可读性很好。

最后我可能会将它包装在一个测试元素中;这样,如果你想一次上传多个测试,那么很容易做到(但是如果你愿意,你仍然可以一次使用一个文件) - 再次没有硬性规则,但建立灵活性总是好的。 / p>

<?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

答案 1 :(得分:1)

有两种方法可以验证XML

成型

这基本上是关于语法的(你的XML格式正确,我验证了它)。

来自wikipedia

格式良好的XML尊重这些规则

  1. 它仅包含正确编码的合法Unicode字符。

  2. 没有特殊的语法字符,例如“&lt;”和“&amp;”出现 除了执行他们的标记 - 描述角色时。

  3. 分隔元素的begin,end和empty-element标记     正确嵌套,没有丢失,没有重叠。
  4. 元素标签区分大小写;开头和结尾标签必须 完全匹配。标记名称不能包含任何字符 !“#$%&amp;'()* +,/;&lt; =&gt;?@ [] ^`{|}〜,也不是空格字符,也不能 以 - ,。或数字开头。

  5. 有一个“root”元素包含所有其他元素 元件。

  6. 您可以在线验证您的XML here

    有效的XML

    有效的XML是关于XML中的内容,它应该是一个问题至少应该有一个解释。

    为此,您需要DTDschema,然后在线验证