- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 TinyXML2 解析一个看起来有点像的 XML:
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE comp PUBLIC "-//JWS//DTD xyz//EN" "file:/documentum/xyz.dtd"
[<!ENTITY subject SYSTEM "dctm://he/abc">
]>
<comp>
...
</comp>
不幸的是,根据 http://www.grinninglizard.com/tinyxmldocs/ ,看起来 TinyXML 不支持解析 DOCTYPE 标签,例如上面示例中的标签。我对 DTD 本身不感兴趣,只想解析 XML 的其余部分(从 <comp>
标记开始)。实现此目标的推荐或最佳方法是什么?我尝试检索以 <comp>
为根的 XML 子树(使用 document.FirstChildElement("comp")
)但这种方法失败了,可能是因为 TinyXML 无法在 <!ENTITY
之后继续解析它似乎认为是错误的标签。关于如何使用 TinyXML 本身实现这一点的任何想法(即最好不需要在调用 TinyXML 之前使用正则表达式匹配删除 <!DOCTYPE ..>
的预处理步骤)?
最佳答案
您可以先将整个文件加载到 std::string 中,跳过不支持的语句,然后解析生成的文档,如下所示:
// Open the file and read it into a vector
std::ifstream ifs("filename.xml", std::ios::in | std::ios::binary | std::ios::ate);
std::ifstream::pos_type fsize = ifs.tellg();
ifs.seekg(0, ios::beg);
std::vector<char> bytes(fsize);
ifs.read(&bytes[0], fsize);
// Create string from vector
std::string xml_str(&bytes[0], fsize);
// Skip unsupported statements
size_t pos = 0;
while (true) {
pos = xml_str.find_first_of("<", pos);
if (xml_str[pos + 1] == '?' || // <?xml...
xml_str[pos + 1] == '!') { // <!DOCTYPE... or [<!ENTITY...
// Skip this line
pos = xml_str.find_first_of("\n", pos);
} else
break;
}
xml_str = xml_str.substr(pos);
// Parse document as usual
TiXmlDocument doc;
doc.Parse(xml_str.c_str());
补充说明:如果 XML 文件太大,最好使用内存映射文件而不是将整个文件加载到内存中。但这完全是另一个问题。
关于c++ - TinyXML - 有什么方法可以跳过有问题的 DOCTYPE 标签吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100408/
有很多线程解释了选择什么 Doctype,但我找不到任何解释实际语法的线程。举个例子: 特别是: PUBLIC 是否可以替换为其他值,是什么意思? 为什么 url 需要用引号括起来? 是什么 ”-”
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试制作 100% 高度的东西,但添加文档类型会破坏它。这在 other questions 上进行了解释. 然而,我发现了一些奇怪的事情——如果我关闭 doctype 标签(我知道你不应该这样
美好的一天, 我正在开发一个 C# Web 应用程序,一切正常,直到我添加普通的 JavaScript。 html代码如下: JScript.js是放入的 JavaS
我有一个主要的框架集页面,它使用 FRAMESET 文档类型..现在它里面有 3 个框架.. 现在对于第 2 帧,我想使用一些 HTML5 代码 ()...所以我想我必须使用 doctype 现在我的
我正在制作一个网页,我即将完成,所以我决定通过一个 html 验证器来验证它,但我的页面出现了一堆错误。我的页面目前适用于 ...但是当我输入 我页面的间距中断。 示例:工作时的图片 代码: 当我添
我刚刚在 W3C 验证器上检查了我的个人登陆页面以确保它是正确的 HTML5,然后发现我需要 而不是 通过。 但是背景图片不会延伸到底部。我已经尝试了 wrapper 的最小高度,并清除了,但似乎没有
这是文档类型所在的文件: Taekwendo tinymce.init({ selector: '#art
这是我的问题的 html 代码 Insert title here var arr = [ "A", "B", "C" ]; for (var i = 0; i 在
我在抓取一些具有多个 声明的网站时遇到了困难。 。 我正在使用带有 requests 的 Python 2.7.9 和来自 bs4 的 BeautifulSoup。当我执行 requests.get
我刚刚在 Windows Server 2008 上创建了一个新的 IIS 网站,以便使用它来部署新网站。 该网站仍然是空的。 如果我尝试在“管理工具”下打开 IIS Web 平台安装程序,则会遇到错
是否有使用 HTML 5 文档类型的专家 ,即使我没有使用任何新的 HTML 5 标签?即使我没有使用任何新的 HTML 5 标签,用 HTML 5 文档类型替换 XHTML 文档类型有什么好处吗?
假设我想将旧网站更改为“HTML5”风格。简单地更改标题是否安全 doctype如下? 原始文档类型可能是: 或 如果改为不可能破坏遗留网页的呈现方式,我认为它是安全的。 最佳答案 为什么是的,
通过在 windows 命令提示符下运行以下命令创建了一个全新的 express.js 项目 npm install express -g express newproject cd newproje
我懂了 DOCTYPE is disallowed when the feature "http://apache.org/xml/features/disallow-doctype-decl" se
这个问题在这里已经有了答案: background-color property doesn't work correctly with HTML5 DOCTYPE [duplicate] (1
我在没有使用 Doctype 的情况下构建了我的页面,但是没有它我可以获得我期望的结果。 即使用户尝试调整窗口大小时,我也尝试每行列出 4 张图像并填充页面。 问题是我最近添加了 Doctype,这里
我注意到我的一个 html 表单存在问题,文本输入字段被截断了。我将其原因缩小到我们在页面顶部使用的 指令。 当我排除 指令时,下面场景中的输入正确呈现,这意味着文本输入字段被完整绘制。但是当我按
我知道很多人在切换到 时遇到类似的问题行,然而,我已经尝试了所有的方法,甚至是经典的 html{height: 100%;} body {min-height: 100%;} 方法,以及其他方法,但
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to replace with in an html file 我在我的
我是一名优秀的程序员,十分优秀!