【发布时间】:2020-08-17 17:00:38
【问题描述】:
我需要处理一些 XSD 来执行操作,并且我需要将它们作为普通的 XML 文件处理。我想获取 XSD 的每个元素并处理它们(例如通过打印它们及其属性)。
这是一个小样本:
<?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 来检索数据,但没有成功。这是我的一段代码
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 以打印其所有数据?
【问题讨论】:
-
“我需要处理一些 XSD 来执行操作”太模糊了。请具体说明您的计划的目的。
-
“我需要将它们作为普通 XML 文件处理”是关于您当前解决方案的声明。这不是技术要求(除非您不同意)。我认为出于某种尚未解释的原因,您需要在 XSD 上执行操作。更好的信息,更好的答案!
-
我需要检索每个元素的名称和属性。一旦有了它们,我就可以在我的程序中使用它们。在代码中,我打印名称和属性只是作为检索这些值的示例。最后我问我该如何打印这些数据。
标签: c++ xml qt xsd qxmlstreamreader