我需要处理一些 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>
我试图按照这篇文章检索数据,但没有成功。这是我的一段代码
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 以打印其所有数据?