[vlc-commits] dash: XML: handle text nodes.

Hugo Beauzée-Luyssen git at videolan.org
Fri Dec 30 18:15:32 CET 2011


vlc | branch: master | Hugo Beauzée-Luyssen <beauze.h at gmail.com> | Sun Dec 25 00:51:52 2011 +0100| [34fabb830ca5fcb4dfc39c39691a41715e72ab0e] | committer: Jean-Baptiste Kempf

dash: XML: handle text nodes.

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=34fabb830ca5fcb4dfc39c39691a41715e72ab0e
---

 modules/stream_filter/dash/xml/DOMParser.cpp |   27 +++++++++++++---------
 modules/stream_filter/dash/xml/Node.cpp      |   31 ++++++++++++++++++++++++-
 modules/stream_filter/dash/xml/Node.h        |    5 ++++
 3 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/modules/stream_filter/dash/xml/DOMParser.cpp b/modules/stream_filter/dash/xml/DOMParser.cpp
index 4736fba..ab562f3 100644
--- a/modules/stream_filter/dash/xml/DOMParser.cpp
+++ b/modules/stream_filter/dash/xml/DOMParser.cpp
@@ -74,24 +74,29 @@ Node*   DOMParser::processNode              ()
 {
     const char *data;
     int type = xml_ReaderNextNode(this->vlc_reader, &data);
-    if(type != -1 && type != XML_READER_TEXT && type != XML_READER_NONE && type != XML_READER_ENDELEM)
+    if(type != -1 && type != XML_READER_NONE && type != XML_READER_ENDELEM)
     {
         Node *node = new Node();
+        node->setType( type );
 
-        std::string name    = data;
-        bool        isEmpty = xml_ReaderIsEmptyElement(this->vlc_reader);
-        node->setName(name);
+        if ( type != XML_READER_TEXT )
+        {
+            std::string name    = data;
+            bool        isEmpty = xml_ReaderIsEmptyElement(this->vlc_reader);
+            node->setName(name);
 
-        this->addAttributesToNode(node);
+            this->addAttributesToNode(node);
 
-        if(isEmpty)
-            return node;
+            if(isEmpty)
+                return node;
 
-        Node *subnode = NULL;
-
-        while((subnode = this->processNode()) != NULL)
-            node->addSubNode(subnode);
+            Node *subnode = NULL;
 
+            while((subnode = this->processNode()) != NULL)
+                node->addSubNode(subnode);
+        }
+        else
+            node->setText( data );
         return node;
     }
     return NULL;
diff --git a/modules/stream_filter/dash/xml/Node.cpp b/modules/stream_filter/dash/xml/Node.cpp
index fe8c4ca..8e90e7e 100644
--- a/modules/stream_filter/dash/xml/Node.cpp
+++ b/modules/stream_filter/dash/xml/Node.cpp
@@ -27,11 +27,16 @@
 
 #include "Node.h"
 
+#include <cassert>
+#include <vlc_common.h>
+#include <vlc_xml.h>
+
 using namespace dash::xml;
 
 const std::string   Node::EmptyString = "";
 
-Node::Node  ()
+Node::Node() :
+    type( -1 )
 {
 }
 Node::~Node ()
@@ -89,9 +94,31 @@ bool                                Node::hasText               () const
 
 const std::string&                         Node::getText               () const
 {
-    return EmptyString;
+    if ( this->type == XML_READER_TEXT )
+        return this->text;
+    else
+    {
+        assert( this->subNodes.size() == 1 );
+        return this->subNodes[0]->getText();
+    }
+}
+
+void Node::setText(const std::string &text)
+{
+    this->text = text;
 }
+
 const std::map<std::string,std::string>&   Node::getAttributes         () const
 {
     return this->attributes;
 }
+
+int Node::getType() const
+{
+    return this->type;
+}
+
+void Node::setType(int type)
+{
+    this->type = type;
+}
diff --git a/modules/stream_filter/dash/xml/Node.h b/modules/stream_filter/dash/xml/Node.h
index e4973a5..f11662f 100644
--- a/modules/stream_filter/dash/xml/Node.h
+++ b/modules/stream_filter/dash/xml/Node.h
@@ -49,13 +49,18 @@ namespace dash
                 std::vector<std::string>            getAttributeKeys    () const;
                 bool                                hasText             () const;
                 const std::string&                  getText             () const;
+                void                                setText( const std::string &text );
                 const std::map<std::string, std::string>& getAttributes () const;
+                int                                 getType() const;
+                void                                setType( int type );
 
             private:
                 static const std::string            EmptyString;
                 std::vector<Node *>                 subNodes;
                 std::map<std::string, std::string>  attributes;
                 std::string                         name;
+                std::string                         text;
+                int                                 type;
 
         };
     }



More information about the vlc-commits mailing list