首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QXmlStreamReader解析XSD

用QXmlStreamReader解析XSD
EN

Stack Overflow用户
提问于 2020-05-03 17:41:09
回答 1查看 177关注 0票数 0

我需要处理一些XSD来执行操作,并且我需要像处理普通XML文件一样处理它们。我希望获取XSD的每个元素并对其进行处理(例如,通过打印它们及其属性)。

这是一个小示例:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="name" type="xs:string"/>
</xs:schema>

我曾尝试使用this post检索数据,但没有成功。这是我的一段代码

代码语言:javascript
复制
void XSDReader::getStructure() const {
  QFile xsdFile(m_filePath.string().c_str());
  if (!xsdFile.open(QFile::ReadOnly | QFile::Text)) {
    throw Exception("Cannot read file " + m_filePath.string() + ". Error is: " + xsdFile.errorString().toStdString());
  }
  QXmlStreamReader reader(&xsdFile);
  std::stringstream ss;
  while (reader.readNextStartElement())
  {
    ss << "Found tag: " << reader.name().toString().toStdString() << "text: " << reader.text().toString().toStdString() << "token: " << reader.tokenString().toStdString();
    for (auto& attribute : reader.attributes())
    {
      ss << "attribute name: " << attribute.name().toString().toStdString() << ", attribute value: " << attribute.value().toString().toStdString();
    }
    reader.readNext();
    ss << "tag value:" << reader.text().toString().toStdString();
    reader.skipCurrentElement();
  }
  auto s = ss.str();
}

处理后的字符串s为:

Found tag: schematext: token: StartElementtag value:

它不包含任何关于xs:string或其属性的内容。

如何正确处理XSD以打印其所有数据?

EN

回答 1

Stack Overflow用户

发布于 2020-05-04 07:15:11

XSD希望获取

的每个元素并对其进行处理(例如,通过打印它们及其属性)。

XML Schema具有复杂的结构,如果将XSD视为XML文档,则很难处理。如果你不管怎样地尝试,你很可能会弄错。

存在代码库,可以将一个XSD (或一组XSD)加载到内存模型中。这些库是由详细了解XML Schema的专家编写的。但不幸的是,XML Schema to C++ Classes并没有很好地为C++提供处理XSD的工具

我使用EMF模型在Java中做了很多XSD处理。它是一组功能齐全的库,支持整个XSD规范。有一个学习曲线,但无论您使用什么技术,这都是正确的;XSD数据模型很复杂。

你可能会说'...but my XSD很简单‘。如果是这样的话,可以继续使用基于XML的方法。但它可能会产生一个脆弱的解决方案,这将不容易维护。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61572398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档