以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- Xml输入 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=55847) |
||||
-- 作者:bagabaga -- 发布时间:2014/8/24 21:58:00 -- Xml输入 一、以下代码读取exp.xml; 1、n表示xml Element的嵌套层数,每进入一个嵌套n=n+1 2、m表示Attribute的次序 3、程序用来显示Element的嵌套关系。 4、去掉 <data date=\'2014-8-24\' /> <data date=\'2014-9-24\' /> 这二行,输出的嵌套关系是正常的,最后返回到{0} 5、遇到Xml文件中有短结尾 ‘/>\' 的时候,(例如<date date = \'2014-08-09\' />),代码读不到EndElement ‘/>’ 嵌套关系就出错。 请教如何能够改这段程序,读取有 “/>"情况下的嵌套关系 程序
Using reader As System.XML.XmlReader = System.XML.XmlReader.Create("exp.xml") \' Move the reader to the second book node. reader.MoveToContent() reader.ReadToDescendant("book") \'reader.Skip() \'Skip the first book. \' Parse the file starting with the second book node. Dim n As Integer = 0 Do Select Case reader.NodeType Case System.XML.XmlNodeType.Element n=n+1 output.show("<{" & n & "}" & reader.Name) Dim m As Integer = 1 While reader.MoveToNextAttribute() output.show(" {" & n & "}=\'{" & m & "}\'"& reader.Name & ": " & reader.Value) m=m+1 End While output.show(">") Case System.XML.XmlNodeType.Text output.show(reader.Value) Case System.XML.XmlNodeType.EndElement output.show("</{" & n & "}>" & reader.Name) n=n-1 End Select Loop While reader.Read() End Using 二、exp.xml: <!--sample XML fragment--> <bookstore> <book genre=\'novel\' ISBN=\'10-861003-324\'> <data date=\'2014-8-24\' /> <title>The Handmaid\'s Tale</title> <price>19.95</price> </book> <book genre=\'novel\' ISBN=\'1-861001-57-5\'>
<data date=\'2014-9-24\' /> <title>Pride And Prejudice</title> <price>24.95</price> </book> </bookstore> 三、运行结果: <{1}bookstore > <{2}date {2}=\'{1}\'date: 2014-08-09 > <{3}book {3}=\'{1}\'genre: novel {3}=\'{2}\'ISBN: 10-861003-324 > <{4}title > The Handmaid\'s Tale </{4}>title <{4}price > 19.95 </{4}>price </{3}>book <{3}date {3}=\'{1}\'date: 2014-09-09 > <{4}book {4}=\'{1}\'genre: novel {4}=\'{2}\'ISBN: 1-861001-57-5 > <{5}title > Pride And Prejudice </{5}>title <{5}price > 24.95 </{5}>price </{4}>book </{3}>bookstore [此贴子已经被作者于2014-8-25 16:19:39编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2014/8/24 22:10:00 -- 你想做什么?直接用xmlDocument来读取,然后查询,把每个<date>读出来不就行了? |
||||
-- 作者:有点甜 -- 发布时间:2014/8/24 22:13:00 -- 提问技巧:1、上传例子;2、说明达到的效果 |
||||
-- 作者:bagabaga -- 发布时间:2014/8/24 22:47:00 -- 看运行结果,应该回到第一层,n=1,但是由于 <date date = \'2014-08-09\' />),n的统计出错,N=3 |
||||
-- 作者:有点甜 -- 发布时间:2014/8/24 22:50:00 -- 上传例子,说明运行应该达到的效果 |
||||
-- 作者:bagabaga -- 发布时间:2014/8/25 16:23:00 -- 附件传上,谢谢 |
||||
-- 作者:有点甜 -- 发布时间:2014/8/25 17:06:00 -- 测试了一下,好像没有找到通用的方法,对于不符合规范的,你只能特殊的额外的处理一下
Using reader As System.XML.XmlReader = System.XML.XmlReader.Create("d:\\exp.xml") \' Move the reader to the second book node. reader.ReadToDescendant("book") Dim m As Integer = 1 If temp = "data" Then End Using |