On 5/2/2011 19:16, Paul B. Cameron wrote:
I am working on a project to port a Win32 application that uses MSXML
to a POSIX environment with LIBXML2. The good news is that this
project includes an abstraction layer on top of the MSXML
implementation, the bad news is that the Win32 impl makes heavy use of
the MSXML "SelectSingleNode" API (which basically just takes an XPath
query and returns a pointer to the first node that matches).
Easy enough to implement using LIBXML2, except the app layer expects
to obtain the namespace mappings necessary to evaluate the XPath
entirely from within the document. In Win32, it's a matter of
requesting the namespaces declared in the document in the form of an
schema collection object:
CComPtr<IXMLDOMSchemaCollection> pReadOnlyCollection;
VERIFY(SUCCEEDED(m_pIDocument->get_namespaces(&pReadOnlyCollection)));
...
// walk through the collection, extract the URI from each member,
build namespace declaration strings like "xmlns:%s='%s'")
...
// register the mapping with the space-separated list of namespace
declaration attributes created above
HRESULT hr = m_pIDocument->setProperty (bstr_t
(L"SelectionNamespaces"), variant_t (strSelectionNamespaces));
I looked through the LIBXML2 doc and didn't find anything quite
equivalent. Is there a simple way to retrieve each namespace declared
in a given instance document without having to resort to a
element-by-element search?
Hi, Paul.
You might want to look at wine's code that uses libxml2 (including
XPath) to build msxml implementation on top of it.
SelectionNamespaces property is supported and used for queries.
http://source.winehq.org/git/wine.git/tree/HEAD:/dlls/msxml3
Thanks,
- Paul C.
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml