- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经用 c++ 在 MSXML 之上编写了一个包装器。加载方法如下所示。代码的问题是有时无法加载格式正确的 xml。
在将 xml 作为字符串传递之前,我对 xmlns 进行了字符串搜索,并将所有出现的 xmlns 替换为 xmlns:dns。 在下面的代码中,我删除了 bom 字符。然后我尝试使用 MSXML loadXML 方法加载。如果加载成功,我将设置 namespace ,如代码所示。
Class XmlDocument{
MSXML2::IXMLDOMDocument2Ptr spXMLDOM;
....
}
// XmlDocument methods
void XmlDocument::Initialize()
{
CoInitialize(NULL);
HRESULT hr = spXMLDOM.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if ( FAILED(hr) )
{
throw "Unable to create MSXML:: DOMDocument object";
}
}
bool XmlDocument::LoadXml(const char* xmltext)
{
if(spXMLDOM != NULL)
{
char BOM[3] = {0xEF,0xBB,0xBF};
//detect unicode BOM character
if(strncmp(xmltext,BOM,sizeof(BOM)) == 0)
{
xmltext += 3;
}
VARIANT_BOOL bSuccess = spXMLDOM->loadXML(A2BSTR(xmltext));
if ( bSuccess == VARIANT_TRUE)
{
spXMLDOM->setProperty("SelectionNamespaces","xmlns:dns=\"http://www.w3.org/2005/Atom\"");
return true;
}
}
return false;
}
我尝试调试仍然无法弄清楚为什么有时 loadXML() 甚至无法加载格式正确的 xml。我在代码中做错了什么。非常感谢任何帮助。
谢谢杰兹
最佳答案
具体问题请引用Strings Passed to loadXML must be UTF-16 Encoded BSTRs .
总的来说,xml 解析器不是为内存中的字符串解析而设计的,例如loadXML不识别BOM,对编码有限制。相反,xml 解析器是为字节数组形式设计的,具有编码检测功能,这对于标准解析器至关重要。为了更好地利用 MSXML,请考虑从 IStream 或 Win32 文件加载。
关于c++ - MSXML 的 loadXML 甚至无法加载格式正确的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109767/
网络服务器正在返回状态代码和描述以响应 XmlHttp 的请求。成分。来自服务器的实际状态响应开头为: HTTP/1.1 400 Not a valid http POST request 我可以在
因此,我正在从事一个项目,根据每个来源的特点,使用许多不同的方法从互联网上的许多不同来源抓取和收集数据。 最近添加的是一个网站 API调用返回以下 XML作为回应: 29b526a69b9
我有一个使用 PHP (libxml) 附带的 XSL 处理器运行的 XSLT 1.0 样式表。我想让相同的样式表在 Microsoft XSL 处理器 MSXML 6.0 (msxml6.dll)
Windows有许多可以并行安装的MSXML版本。即3、4、5和6版。 我必须找到系统上存在哪个msxml文件。我的查询仅通过注册表限制。 最佳答案 您的计算机上安装的所有MSXML版本都将在以下注册
我正在使用 MSXML 6.0 将我自己的 XML 转换为另一种 XML 格式。我不确定我是否只是不明白 MSXML 是如何工作的,但我相信我已经注意到它的一些奇怪行为...... 我正在使用 set
我想在 VBA 中使用 MSXML 创建 XML。目标输出非常基本: 2021-11-10
假设我有一个计算 XPath 表达式“//node/@*”的结果。 MSXML6 返回一组 IXMLDOMNode 对象,它们实际上是 IXMLDOMAttribute 对象。 问题:有没有办法删除仅
XMLNotepad 在转换失败时提供以下文本(例如): Error Transforming XML The variable or parameter 'saturated-background-
我有一个应用程序,用于使用 dll 中的一些遗留代码来测试制造的产品。该应用程序可以针对不同的产品进行设置。设置是通过 xml 文件完成的,并且可以(并且将会)在运行时(即批处理结束时)进行更改。 x
我需要解析一些 XML 并编写一些帮助程序。我不是 C++ 专家,实际上我七年前就用 c 编写过。所以,我想确定一下,我使用的方法是否正确:) 1) 我实现了一些简单的助手来处理异常。例如: CCom
我必须处理一个遗留应用程序,该应用程序使用 MSXML 将测量数据写入一个简单的 XML 文件。基本上,这就是正在发生的事情: MSXML2::IXMLDOMDocument2Ptr pXmlDocu
这似乎是一个常见问题,尽管我在 SO 上找不到它。 我应该在我的应用程序中使用哪个版本的 MSXML,更重要的是,我应该如何决定? 有 MSXML3、4、5 和 6。 我最近在 calling-wcf
我正在开发一个自动化测试应用程序,目前正在编写一个函数来比较两个 XML 文件之间的值,这些文件应该相同,但可能不相同。这是我尝试处理的 XML 示例:
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
使用此代码获取站点的 rss。此代码适用于我的计算机和许多其他计算机。但在某些计算机(Windows XP 或 7)中,我收到此错误:未安装 MSXML 我该如何解决这个问题?怎么了? 代码如下: p
我正在使用 MSXML 4 生成以下 xml 字符串: 但是,我的 IXMLDOMDo
我如何将架构添加到 IXMLDOMDocument ? 例如,我想生成 XML: 我可以构造 DOMDocument60 对象(伪代码): DOMDocument60 doc = new
MSXML6 应该具有最佳的安全性、性能、可靠性和 W3C 一致性 ( Using the right version of MSXML in Internet Explorer )。 问题: 为什么
我使用导入了 MSXML 的 Visual Studio C++ (#import "msxml6.dll") 使用智能指针创建 xml 文档。 我使用 setProperty() 函数创建命名空间,
我有一个 users.xml 我使用以下代码获得了对 Users 元素的引用 IXMLDOMDo
我是一名优秀的程序员,十分优秀!