xerces-c,c++解析xml,解析xml字符串

yqinye 2007-06-15 10:30:33
我想解析一个xml字符串比如
static const char* gXMLInMemBuf =
"\
<?xml version='1.0' encoding='UTF-8'?>\n\
<!DOCTYPE company [\n\
<!ELEMENT company (product,category,developedAt)>\n\
<!ELEMENT product (#PCDATA)>\n\
<!ELEMENT category (#PCDATA)>\n\
<!ATTLIST category idea CDATA #IMPLIED>\n\
<!ELEMENT developedAt (#PCDATA)>\n\
]>\n\n\
<company idea='great' id ='2'>\n\
<product idea='great'>XML4C</product>\n\
<category idea='great'>XML Parsing ToolsIBM</category>\n\
<developedAt idea='great'>\n\
IBM Center for Java Technology, Silicon Valley, Cupertino, CA\n\
</developedAt>\n\
</company>\
";
而在Dom里面传入的是文件名。我想传入的是字符串该如何解析?有没有人做过类似的,看了部分XERCES-C api当中sax的方式有一个内存解析的例子,但是在startElement()里面好像文档和实际的编译出来不正确的。
有没有人做过类似的请指点一下。谢谢
...全文
1323 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengdeping_362 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

const char* bufferId = bufferIdOnly;
MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager;
MemBufInputSource* memBufIS = new MemBufInputSource
(
……
[/Quote]



您好,能不能把这块代码发给我用用呢,解析xml格式字符串的弄了N久都没搞成。邮箱:zerngdeping@163.com,万分感谢!
hoheart 2008-05-05
  • 打赏
  • 举报
回复
真好,万分感谢!!!
yqinye 2007-06-18
  • 打赏
  • 举报
回复
const char* bufferId = bufferIdOnly;
MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager;
MemBufInputSource* memBufIS = new MemBufInputSource
(
(const XMLByte*)xmlContent
, strlen(xmlContent)
, bufferId
, false
);

DOMInputSource * inSource = new Wrapper4InputSource(memBufIS,true, manager);

XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMBuilder* parser = ((DOMImplementationLS*)impl)->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
DOMDocument* xmlDoc;

xmlDoc = parser->parse(*inSource);
这样就把char *的字符串转换成 Dom 的document了。
终于把问题解决了。以供后来者参考。
  • 打赏
  • 举报
回复
没用过这个,只用过libxml
yqinye 2007-06-16
  • 打赏
  • 举报
回复
生成xml, 第一种标准输出,第二种文件输出,第三种内存方式输出, 内存方式输出已经弄好了,现在就是问内存解析的那一块。
yqinye 2007-06-16
  • 打赏
  • 举报
回复
Xerces-c里面提供了很多解析的接口和方法, 相应的API调用就可以了, 但是大部分Dom方式的解析,传入的都是一个xmlfile 文件名的方式,而现在就是想不通过生成文件的方式, 直接比如从Socket传过来的包里面取出来,取到 xml内容的字符串,然后就解析。

而Sax的解析方式有一个关于memParse的例子, 但是在handler里面,好像取不到想要的数据,在例子当中 startElement事件里面,返回的类型 ApI当中是 string name = attributes.getName(i) ,而实际返回的是 const unsigned short 类型,输出也是乱七八糟的东西。

所以就是问问各位大哥,有没有用xerces-c解析过xml,以字符串内存的方式该如何解析。谢谢。
qhfu 2007-06-16
  • 打赏
  • 举报
回复
比如:
parseDom(){
//readStartToken();
//if (not start token ){
// report error;
//}
//if has attribute, read attribute.
//read value.
//if (has sub){
//parse sub.
//}
...


//readEndToken();

}

随便写写的 :)
qhfu 2007-06-16
  • 打赏
  • 举报
回复
最简单的做法,定好结构,一个token一个token 读入,就是语法分析,读一个个token就是词法分析.
yqinye 2007-06-16
  • 打赏
  • 举报
回复
没有人做过吗?或者我发的版面不对?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧