以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  解析xml文件抛出SAXParseException异常,请问xml文档中是否允许使用<c:Tables>标记?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=18198)


--  作者:gumpgz
--  发布时间:5/12/2005 11:13:00 AM

--  解析xml文件抛出SAXParseException异常,请问xml文档中是否允许使用<c:Tables>标记?
我解析的时powerdesigner生成的pdm文件,发现该文件也是xml文件,
其中都是<c:Tables>这样的标记,即字母+冒号+单词
我用dom4j解析总是出现如下异常:
org.dom4j.DocumentException: Error on line 2 of document file:///D:/MyWork/generateconf/test.xml : 未声明的名称前缀:“c:Tables”。 Nested exception: 未声明的名称前缀:“c:Tables”。
 at org.dom4j.io.SAXReader.read(SAXReader.java:482)
 at org.dom4j.io.SAXReader.read(SAXReader.java:264)
 at CompletePDM.main(CompletePDM.java:18)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)
Nested exception:
org.xml.sax.SAXParseException: 未声明的名称前缀:“c:Tables”。
 at org.apache.crimson.parser.Parser2.error(Parser2.java:3354)
 at org.apache.crimson.parser.Parser2.processName(Parser2.java:1844)
 at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1671)
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
 at org.dom4j.io.SAXReader.read(SAXReader.java:465)
 at org.dom4j.io.SAXReader.read(SAXReader.java:264)
 at CompletePDM.main(CompletePDM.java:18)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

于是我将“c:”全部替换成“cccc”,其他的比如"a:"全部替换成“aaaa”,等等,
这样保证该xml文件中没有<c:Tables>这样的结构,全部变成<ccccTables>这样的结构,
这时解析就是正确的

疑问,对<c:Tables>这样的标识不能直接处理么?必须得替换么?
是不是xml标准不允许使用<c:Tables>这样的形式?

如果可以直接处理,我该如何操作呢?

谢谢


--  作者:gumpgz
--  发布时间:5/12/2005 12:14:00 PM

--  
搞定了,是我自己偷懒,直接将pdm中<c:Tables>之间的内容copy出来,没有保留model定义,
加上model定义就可以了,
<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
--  作者:gumpgz
--  发布时间:5/12/2005 12:27:00 PM

--  
但是有一个新的问题,我把<Model>和<c:Tables>切出来,自己建立一个xml文件,是没有错的,但是要解析整个pdm就会出现错误了:
org.dom4j.DocumentException: Error on line 1 of document file:///D:/MyWork/generateconf/test.pdm : 字符转换错误:“Malformed UTF-8 char -- is an XML encoding declaration missing?”(行号可能太小)。 Nested exception: 字符转换错误:“Malformed UTF-8 char -- is an XML encoding declaration missing?”(行号可能太小)。
 at org.dom4j.io.SAXReader.read(SAXReader.java:482)
 at org.dom4j.io.SAXReader.read(SAXReader.java:264)
 at CompletePDM.main(CompletePDM.java:18)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)
Nested exception:
org.xml.sax.SAXParseException: 字符转换错误:“Malformed UTF-8 char -- is an XML encoding declaration missing?”(行号可能太小)。
 at org.apache.crimson.parser.InputEntity.fatal(InputEntity.java:1100)
 at org.apache.crimson.parser.InputEntity.fillbuf(InputEntity.java:1072)
 at org.apache.crimson.parser.InputEntity.isXmlDeclOrTextDeclPrefix(InputEntity.java:914)
 at org.apache.crimson.parser.Parser2.maybeXmlDecl(Parser2.java:1183)
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:653)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
 at org.dom4j.io.SAXReader.read(SAXReader.java:465)
 at org.dom4j.io.SAXReader.read(SAXReader.java:264)
 at CompletePDM.main(CompletePDM.java:18)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

我切出来的xml,格式如下:
<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
<c:Tables></c:Tables>
</Model>

完成的pdm的结构为:/Model/o:RootObject/c:Children/o:Model/c:Tables

是不是pdm中有什么非法字符串呢?


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
109.375ms