Giter VIP home page Giter VIP logo

libxmlplusplus's Introduction

libxml++

libxml++ (a.k.a. libxmlplusplus) provides a C++ interface to XML files. It uses libxml2 to access the XML files, and in order to configure libxml++ you must have both libxml2 and pkg-config installed.

To get the latest version of libxml++, see the libxml++ web site

See the examples directory for example code.

Use pkg-config to discover the necessary include and linker arguments. For instance,

  pkg-config libxml++-5.0 --cflags --libs

If you build with Autotools, ideally you would use PKG_CHECK_MODULES in your configure.ac file.

Building

Whenever possible, you should use the official binary packages approved by the supplier of your operating system, such as your Linux distribution.

Building on Windows

See MSVC_NMake/README

Building from a release tarball

Extract the tarball and go to the extracted directory:

  $ tar xf libxml++-@[email protected]
  $ cd libxml++-@LIBXMLXX_VERSION@

It's easiest to build with Meson, if the tarball was made with Meson, and to build with Autotools, if the tarball was made with Autotools. Then you don't have to use maintainer-mode.

How do you know how the tarball was made? If it was made with Meson, it contains files in untracked/docs/ and other subdirectories of untracked/.

Building from a tarball with Meson

Don't call the builddir 'build'. There is a directory called 'build' with files used by Autotools.

  $ meson setup --prefix /some_directory --libdir lib your_builddir .
  $ cd your_builddir

If the tarball was made with Autotools, you must enable maintainer-mode:

  $ meson configure -Dmaintainer-mode=true

Then, regardless of how the tarball was made:

  $ ninja
  $ ninja install

You can run the tests like so:

  $ ninja test

Building from a tarball with Autotools

If the tarball was made with Autotools:

  $ ./configure --prefix=/some_directory

If the tarball was made with Meson, you must enable maintainer-mode:

  $ ./autogen.sh --prefix=/some_directory

Then, regardless of how the tarball was made:

  $ make
  $ make install

You can build the examples and tests, and run the tests, like so:

  $ make check

Building from git

Building from git can be difficult so you should prefer building from a release tarball unless you need to work on the libxml++ code itself.

jhbuild can be a good help

Building from git with Meson

Maintainer-mode is enabled by default when you build from a git clone.

Don't call the builddir 'build'. There is a directory called 'build' with files used by Autotools.

  $ meson setup --prefix /some_directory --libdir lib your_builddir .
  $ cd your_builddir
  $ ninja
  $ ninja install

You can run the tests like so:

  $ ninja test

You can create a tarball like so:

  $ ninja dist

Building from git with Autotools

  $ ./autogen.sh --prefix=/some_directory
  $ make
  $ make install

You can build the examples and tests, and run the tests, like so:

  $ make check

You can create a tarball like so:

  $ make distcheck

or

  $ make dist

libxmlplusplus's People

Contributors

aburgm avatar alexp-sssup avatar amigadave avatar cdevienne avatar cedricgustin avatar dtrebbien avatar fanc999 avatar garrison avatar hfiguiere avatar jaalburquerque avatar jhs-s avatar kjellahl avatar mathiasl avatar mlt avatar murraycu avatar neheb avatar ovitters avatar pgrzegorczyk avatar talisein avatar ya1gaurav avatar yselkowitz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

libxmlplusplus's Issues

version 5.x does not require C++17

As far I know, C++ version was ramped up due to glibmm requirements.
As version 5.x does not depend on glibmm anymore (C++17), may I suppose it works with C++11?

Actually, I downloaded 5.0.1 tarball, built it and even did make check and everything seems to be ok. But can you confirm it?

jhbuild/modulesets/gnome-world.modules should be updated

libxml++ has been moved to GitHub, and more parallel-installable versions
have been released, but jhbuild still pulls libxml++ from GitLab.
Would this be a suitable update of jhbuild/modulesets/gnome-world.modules?

  <autotools id="libxmlplusplus-3">
    <branch repo="github.com" checkoutdir="libxmlplusplus-3"
            module="libxmlplusplus/libxmlplusplus.git" revision="libxml++-3-2"/>
    <dependencies>
      <dep package="libxml2"/>
      <dep package="glibmm-2.4"/>
    </dependencies>
  </autotools>

  <autotools id="libxmlplusplus-4">
    <branch repo="github.com" checkoutdir="libxmlplusplus-4"
            module="libxmlplusplus/libxmlplusplus.git" revision="libxml++-4-0"/>
    <dependencies>
      <dep package="libxml2"/>
      <dep package="glibmm"/>
    </dependencies>
  </autotools>

  <autotools id="libxmlplusplus">
    <branch repo="github.com" checkoutdir="libxmlplusplus"
            module="libxmlplusplus/libxmlplusplus.git"/>
    <dependencies>
      <dep package="libxml2"/>
    </dependencies>
  </autotools>

I haven't tested it. I can do that, and update gnome-world.modules.

libxml++-4: Use glibmm-2.66 instead of glibmm-2.64

The ABI name of the unstable glibmm has been increased once again.
The libxml++-4-0 branch should be updated with the attached patch.

0001-Use-glibmm-2.66-instead-of-glibmm-2.64.txt

I don't seem to have write permission to github.com/libxmlplusplus/libxmlplusplus.

ERROR: Permission to libxmlplusplus/libxmlplusplus.git denied to kjellahl.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

@murraycu Can you push the patch or give me write permission, please.

It's not important that I have write permission. I don't expect to work with
libxml++ in the future. I've enough to do with gtkmm and its dependencies.

Add Meson support in the libxml++-4-0 and master branches

The changes that will add Meson support in the libxml++-4-0 and master branches
will be very similar to the changes in the libxml++-3-2 branch. I plan to
push these changes directly, without writing PRs.

@fanc999 When I've pushed these changes, it would be fine if you can check if
more changes are necessary for MSVC builds.

Infinite recursion in destructor when document was read by htmlReadDoc

#include <libxml/HTMLparser.h>
#include <libxml++/libxml++.h>
#include <string>

int
main(void)
{
        std::string text = "BLABLA";
        xmlDoc* doc = htmlReadDoc((xmlChar*)text.c_str(), NULL, NULL, HTML_PARSE_RECOVER | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING);
        // Encapsulate raw libxml document in a libxml++ wrapper
        xmlpp::Document doc1(doc);
        return 0;
}

compile as:
g++ -o test test.cpp $(pkg-config --cflags libxml++-5.0) $(pkg-config --libs libxml++-5.0)

./test segfaults

sax_exception_example does not compile under mingw

FAILED: subprojects/libxml++-5.0.2/examples/sax_exception_example.exe
x86_64-w64-mingw32-g++  -o subprojects/libxml++-5.0.2/examples/sax_exception_example.exe subprojects/libxml++-5.0.2/examples/sax_exception_example.exe.p/sax_exception_main.cc.obj subprojects/libxml++-5.0.2/examples/sax_exception_example.exe.p/sax_exception_myparser.cc.obj -Wl,--allow-shlib-undefined -Wl,--start-group subprojects/libxml++-5.0.2/libxml++/libxml++-5.0.dll.a /usr/x86_64-w64-mingw32/sys-root/mingw/lib/libxml2.dll.a -Wl,--subsystem,console -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,--end-group
/usr/lib/gcc/x86_64-w64-mingw32/12.2.1/../../../../x86_64-w64-mingw32/bin/ld: subprojects/libxml++-5.0.2/examples/sax_exception_example.exe.p/sax_exception_myparser.cc.obj:myparser.cc:(.rdata$.refptr._ZTVN5xmlpp9exceptionE[.refptr._ZTVN5xmlpp9exceptionE]+0x0): undefined reference to `vtable for xmlpp::exception'
collect2: error: ld returned 1 exit status

why each xml element is parsed into 2 nodes?

why I have 2 children with <ISSN IssnType="Electronic">1749-5024</ISSN>? One is ISSN Element node, one is text node with text 1749-5024. This is kind of strange. Normally we would expect it is a Single node has both attributes and text. Or a Element node contain a text node. It seems all xml element has 2 nodes so far, why cannot we just make all nodes has a text member and the text can be optional? then we can do for loop:

for (auto const i: pNode->get_children())
{
   std::cout << i->text << "\n";
}

Or at least make the text node be the child of the ISSN, then we can use get_first_child_text() on it.

Visual studio installation not working.

Can someone please add detail guide on how to install this in visual studio 22?

Not many people use meson, I don't understand why build is focused on it and it's completely useless guide for VC users.
The current VC guide just says, install libxml2, link it and run nmake.
It does not work.

I installed libxml2 via vcpkg, even added package include and lib directories to VC path (even though vcpkg should already be integrating) and I am getting message:

..\libxml++\attribute.cc: fatal error C1083: Cannot open include file: 'msvc_recommended_pragmas.h': No such file or directory

I have virtually no idea where this header is. Some search indicates that it is glibmm dependency, I installed that as well, but still getting the error.
Can someone who installed this before try installing libxml2 via vcpkg make this work and expalin me how.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.