gpt4 book ai didi

html - 使用 QXmlStreamReader 读取 XML 文档中嵌入的 HTML

转载 作者:行者123 更新时间:2023-11-28 06:15:23 25 4
gpt4 key购买 nike

使用 QXmlStreamReader , 我想要使用 HTML 标签的富文本格式的 XML 文件。例如,在此文件中,如果能够访问 <em> 会很好和其他用于格式化文本的 HTML 标记。 (使用 Qt,我可以将 HTML 放在任何地方,在 QLabel 或其他地方。)

<?xml version="1.0" encoding="UTF-8"?>
<course name="Introductory Course">
<course-description>Welcome to the <em>basic course</em>.</course-description>
</course>

如果我使用 QXmlStreamReader::readElementText(QXmlStreamReader::IncludeChildElements)当位于 <course-description> 的开始元素时,我得到里面的文字 <course-description>剥离标签,例如 Welcome to the basic course.

当然,我希望这样做时不必考虑代码中的每个 HTML 标记。

最佳答案

我最终做的是创建一个方法,我可以在我会调用 QXmlStreamReader::readElementText 的地方使用它.在 XML 文件中,我用 XHTML 命名空间标记了一个标签:

<?xml version="1.0" encoding="UTF-8"?>
<course name="Introductory Course">
<course-description xmlns="http://www.w3.org/1999/xhtml">Welcome to the <em>basic course</em>.</course-description>
</course>

然后每当我用 QXmlStreamReader 读取标签时, 我可以打电话 readHtml .如果该元素具有 XHTML 命名空间,它会读取并返回所有元素,直到它到达结束元素。 (这意味着与包含命名空间的元素(上面的 <course-description>)同名的元素不能包含在 HTML 代码中。)

QString MyClass::readHtml(QXmlStreamReader &xml)
{
if( xml.namespaceUri().toString() != "http://www.w3.org/1999/xhtml" )
{
return xml.readElementText(QXmlStreamReader::IncludeChildElements);
}
QString terminatingElement = xml.name().toString();
QString html;
QXmlStreamWriter writer(&html);
do
{
xml.readNext();
switch( xml.tokenType() )
{
case QXmlStreamReader::StartElement:
writer.writeStartElement(xml.name().toString());
writer.writeAttributes(xml.attributes());
break;
case QXmlStreamReader::EndElement:
writer.writeEndElement();
break;
case QXmlStreamReader::Characters:
writer.writeCharacters(xml.text().toString());
break;
// a more thorough approach would handle these; enumerating them removes a compiler warning
case QXmlStreamReader::NoToken:
case QXmlStreamReader::Invalid:
case QXmlStreamReader::StartDocument:
case QXmlStreamReader::EndDocument:
case QXmlStreamReader::Comment:
case QXmlStreamReader::DTD:
case QXmlStreamReader::EntityReference:
case QXmlStreamReader::ProcessingInstruction:
break;
}
}
while (!xml.atEnd() && xml.name() != terminatingElement );
return html;
}

关于html - 使用 QXmlStreamReader 读取 XML 文档中嵌入的 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com