作者m339606 (mize)
看板C_Sharp
标题Re: [问题] XML检查
时间Sat Jan 12 23:02:32 2013
※ 引述《g66932007 (孤单的人)》之铭言:
: 请问XML有tag检查的方式吗??
: 目前系统是User下载XML档(固定的tag)修改其内容,
: 再上传转成pdf档,可是User往往都把tag弄乱,造成转成pdf时出现乱码= =
: 所以请问一下是否可以上传时检查每个tag名称.顺序是否正确.......
: 还是有比较好的方式请不吝指教 谢谢~
目前理解你的需求大概就是将固定的XML档格式传给User让User输入资料在回传处理
首先转为Pdf的作用由於没说明所以就先当作你一定要这样转换(XML => PDF)
User会弄乱这点的确不好处理,就像车辆销售员当然是假设买主会开车
难道销售员还要去担心买主不会开车要怎麽办?这是题外话了
XmlDocument类别的简单介绍
http://0rz.tw/VbQPS
MSDN的官方介绍
http://0rz.tw/aNXax新视窗开启页面
工作时学习XML服用上面两个介绍花三个小时左右学会XML读取与写入
其中XmlNode应该有你需要的资料
-----------------------------
"印象中"读取根节点(你指的应该是这个)不需要特地指定ID
与其怕User会去改名称不如怕他们会把XML的分层架构删除或打乱造成无法读取
比较好的方式是提供使用者一个UI不要让使用者直接碰程序处理的资料
例如提供网页、小程式等等...用这些UI来负责处理XML档再回传
再来读取node name的方式可以使用递回方式一层一层下去找
递回请参考MSDN的寻找档案范例,原则上概念跟结构是差不多的
这部分我就不直接提供程式码了,自己思考探索并得到的果实是很鲜美的
如何:以 C# .NET 递回搜寻目录
http://0rz.tw/LHEsc
以下是如果我要验证XML内的结构是否正确时的做法(没实际写过可能流程有错误)
1.读取XML档进Reader
2.使用递回方式将各层的节点分开存放到各个阵列Node中(子节点、孙节点等等...)
3.从外层到内层依序验证数量、名称、属性等等...
我会选择将各层分开存放而不是全部存入List,可以先从外层依序验证到内层
并且从数量、名称、属性顺序验证,如果一口气全部进入List然後用回圈全部
验证还蛮浪费效能时间,而且全部进入List你想如何分出各层我就不清楚了
假设你的架构子节点叫 Apple 孙节点叫 Count
但是使用者把子节点改为 Count 孙节点叫Apple
但是进入List用回圈全部验证都是正确的(因为两者都存在)
因为没去验证他在不在正确的层上
当然如果你完全没办法确定或太多太多层的话
就推荐使用二维阵列来处理了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.33.85.47
1F:推 g66932007:谢谢前辈回答 是将xml的node name读到LIST里再比对吧? 01/12 23:19
2F:→ g66932007:可是我怕user动到NAMESPACES的部分= = 01/12 23:20
※ 编辑: m339606 来自: 114.33.85.47 (01/13 00:11)
3F:→ tsczx:比较建议写成介面,让使用者可以在介面上新增删除修改节点 01/13 00:15
4F:→ tsczx:点选确认後转成PDF 01/13 00:17
5F:→ tsczx:如果只是单纯改内容,连结点增修都省了,做介面让他们修改名称 01/13 00:19