我之前从未使用过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>
答案 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格式正确,我验证了它)。
格式良好的XML尊重这些规则
它仅包含正确编码的合法Unicode字符。
没有特殊的语法字符,例如“&lt;”和“&amp;”出现 除了执行他们的标记 - 描述角色时。
元素标签区分大小写;开头和结尾标签必须 完全匹配。标记名称不能包含任何字符 !“#$%&amp;'()* +,/;&lt; =&gt;?@ [] ^`{|}〜,也不是空格字符,也不能 以 - ,。或数字开头。
有一个“root”元素包含所有其他元素 元件。
您可以在线验证您的XML here
有效的XML
有效的XML是关于XML中的内容,它应该是一个问题至少应该有一个解释。