LOAD XML 命令导致缺少 fields/nodes
LOAD XML command results in missing fields/nodes
tldr;当我执行下面的 LOAD XML 语句时,它看起来是成功的,但由于某种原因,lessonName 字段始终为空。 XML 文档中的所有其他字段都可以正确加载,但由于某种原因,这个被跳过了。
我正在尝试使用 MySQL 将 XML 文档加载到 SQL table 中。 有问题的字段中没有嵌入标签,它不是在尝试读取标签的属性;它是一个包含字符串的直接标记。 它是被跳过的 lessonName 字段。下面是我的 XML 文档:
<?xml version = "1.0"?>
<Lesson:LessonContent xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd">
<row>
<courseID>COMP466</courseID>
<unitNumber>1</unitNumber>
<unitName>Intro to HTML</unitName>
<lessonName>Introduction</lessonName>
<!--The following text '<p>' paragrah goes here '</p>' should enclose each
paragraph of the lesson-->
<textBody><p> A bunch of stuff related to lesson content is written here...</p>
</textBody>
</row>
</Lesson:LessonContent>
这是我的XSD
<?xml version = '1.0'?>
<schema xmlns = "http://www.w3.org/2001/XMLSchema"
xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd"
targetNamespace = "UniqueURIHERE:Lessonv1.0.xsd">
<element name = 'LessonContent' type = 'Lesson:root'/>
<complexType name = 'root'>
<sequence>
<element name = 'row' type = 'Lesson:row'/>
</sequence>
</complexType>
<complexType name = 'row'>
<sequence>
<element name = 'courseID' type = 'string'/>
<element name = 'unitNumber' type = 'float'/>
<element name = 'unitName' type = 'string'/>
<element name = 'lessonName' type = 'string'/>
<element name = 'textBody' type = 'string'/>
</sequence>
</complexType>
</schema>
这是我用来加载 XML 文档的命令:
LOAD XML INFILE 'Unit1_introToHTML.xml' INTO TABLE LESSON ROWS IDENTIFIED BY '<row>';
这是 table 我正在将其加载到
的列
SHOW COLUMNS FROM LESSON;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| courseID | varchar(50) | NO | PRI | NULL | |
| unitName | varchar(255) | YES | | NULL | |
| lessonName | varchar(255) | NO | PRI | NULL | |
| unitNumber | int(11) | NO | | NULL | |
| textBody | text | NO | | NULL | |
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.006 sec)
当我执行 LOAD XML 语句时,它看起来是成功的,但出于某种原因,lessonName 字段始终为空。所有其他字段均正确加载,但由于某种原因,此字段被跳过。
我花了很多时间试图在 SO 上寻找答案,但我所能找到的只是人们试图加载带有嵌入式节点或带有不起作用的属性的节点(显然不是我的问题)。当我执行命令时,没有错误代码或任何东西甚至指向正确的方向,它看起来很成功。我收到以下确认成功的消息:
查询正常,1 行受影响(0.002 秒)
记录:1 已删除:0 已跳过:0 警告:0
当我执行 'SELECT * FROM LESSON;' 以确认我的记录已加载时,lessonName 列为空,但所有其他字段都符合我的预期。
所以我解决了我的问题,但如果有人想尝试启发,我仍然不明白这个问题。我删除了 XML 文档中 lessonName 标记后的注释,它加载正常。出于某种原因,评论导致标记被跳过?
如果有人知道为什么这是个问题,我很想听听!我不能在需要加载到 SQL table 的 XML 文档中使用注释,这似乎很愚蠢?我将 XML 更改为以下内容(实际上只是删除了评论),现在它很完美。
<?xml version = "1.0"?>
<Lesson:LessonContent xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd">
<row>
<courseID>COMP466</courseID>
<unitNumber>1</unitNumber>
<unitName>Intro to HTML</unitName>
<lessonName>Introduction</lessonName>
<textBody><p> A bunch of stuff related to lesson content is written here...</p>
</textBody>
</row>
</Lesson:LessonContent>
我快速搜索了与 LOAD XML 功能相关的错误,我的怀疑得到了证实。 LOAD XML 功能可能不会(好吧,最初没有)使用适当的 XML 解析器来解析输入。将这些错误视为证据:
https://bugs.mysql.com/bug.php?id=86916
https://bugs.mysql.com/bug.php?id=84245
结论:这可能是 MySQL XML 加载功能中的错误。
tldr;当我执行下面的 LOAD XML 语句时,它看起来是成功的,但由于某种原因,lessonName 字段始终为空。 XML 文档中的所有其他字段都可以正确加载,但由于某种原因,这个被跳过了。
我正在尝试使用 MySQL 将 XML 文档加载到 SQL table 中。 有问题的字段中没有嵌入标签,它不是在尝试读取标签的属性;它是一个包含字符串的直接标记。 它是被跳过的 lessonName 字段。下面是我的 XML 文档:
<?xml version = "1.0"?>
<Lesson:LessonContent xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd">
<row>
<courseID>COMP466</courseID>
<unitNumber>1</unitNumber>
<unitName>Intro to HTML</unitName>
<lessonName>Introduction</lessonName>
<!--The following text '<p>' paragrah goes here '</p>' should enclose each
paragraph of the lesson-->
<textBody><p> A bunch of stuff related to lesson content is written here...</p>
</textBody>
</row>
</Lesson:LessonContent>
这是我的XSD
<?xml version = '1.0'?>
<schema xmlns = "http://www.w3.org/2001/XMLSchema"
xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd"
targetNamespace = "UniqueURIHERE:Lessonv1.0.xsd">
<element name = 'LessonContent' type = 'Lesson:root'/>
<complexType name = 'root'>
<sequence>
<element name = 'row' type = 'Lesson:row'/>
</sequence>
</complexType>
<complexType name = 'row'>
<sequence>
<element name = 'courseID' type = 'string'/>
<element name = 'unitNumber' type = 'float'/>
<element name = 'unitName' type = 'string'/>
<element name = 'lessonName' type = 'string'/>
<element name = 'textBody' type = 'string'/>
</sequence>
</complexType>
</schema>
这是我用来加载 XML 文档的命令:
LOAD XML INFILE 'Unit1_introToHTML.xml' INTO TABLE LESSON ROWS IDENTIFIED BY '<row>';
这是 table 我正在将其加载到
的列SHOW COLUMNS FROM LESSON;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| courseID | varchar(50) | NO | PRI | NULL | |
| unitName | varchar(255) | YES | | NULL | |
| lessonName | varchar(255) | NO | PRI | NULL | |
| unitNumber | int(11) | NO | | NULL | |
| textBody | text | NO | | NULL | |
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.006 sec)
当我执行 LOAD XML 语句时,它看起来是成功的,但出于某种原因,lessonName 字段始终为空。所有其他字段均正确加载,但由于某种原因,此字段被跳过。
我花了很多时间试图在 SO 上寻找答案,但我所能找到的只是人们试图加载带有嵌入式节点或带有不起作用的属性的节点(显然不是我的问题)。当我执行命令时,没有错误代码或任何东西甚至指向正确的方向,它看起来很成功。我收到以下确认成功的消息:
查询正常,1 行受影响(0.002 秒)
记录:1 已删除:0 已跳过:0 警告:0
当我执行 'SELECT * FROM LESSON;' 以确认我的记录已加载时,lessonName 列为空,但所有其他字段都符合我的预期。
所以我解决了我的问题,但如果有人想尝试启发,我仍然不明白这个问题。我删除了 XML 文档中 lessonName 标记后的注释,它加载正常。出于某种原因,评论导致标记被跳过?
如果有人知道为什么这是个问题,我很想听听!我不能在需要加载到 SQL table 的 XML 文档中使用注释,这似乎很愚蠢?我将 XML 更改为以下内容(实际上只是删除了评论),现在它很完美。
<?xml version = "1.0"?>
<Lesson:LessonContent xmlns:Lesson = "UniqueURIHERE:Lessonv1.0.xsd">
<row>
<courseID>COMP466</courseID>
<unitNumber>1</unitNumber>
<unitName>Intro to HTML</unitName>
<lessonName>Introduction</lessonName>
<textBody><p> A bunch of stuff related to lesson content is written here...</p>
</textBody>
</row>
</Lesson:LessonContent>
我快速搜索了与 LOAD XML 功能相关的错误,我的怀疑得到了证实。 LOAD XML 功能可能不会(好吧,最初没有)使用适当的 XML 解析器来解析输入。将这些错误视为证据:
https://bugs.mysql.com/bug.php?id=86916
https://bugs.mysql.com/bug.php?id=84245
结论:这可能是 MySQL XML 加载功能中的错误。