|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (c) 2015 Saxonica Limited.
|
|
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
// This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef SAXON_XDMNODE_h
|
|
#define SAXON_XDMNODE_h
|
|
|
|
#include "XdmItem.h"
|
|
#include <string.h>
|
|
//#include "XdmValue.h"
|
|
|
|
typedef enum eXdmNodeKind { DOCUMENT=9, ELEMENT=1, ATTRIBUTE=2, TEXT=3, COMMENT=8, PROCESSING_INSTRUCTION=7, NAMESPACE=13, UNKNOWN=0 } XDM_NODE_KIND;
|
|
|
|
|
|
|
|
class XdmValue;
|
|
|
|
class XdmNode : public XdmItem
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
/* XdmNode(const XdmValue& valuei){
|
|
//value = (sxnc_value *)malloc(sizeof(sxnc_value));
|
|
value = valuei.values[0]->getUnderlyingCValue();
|
|
xdmSize =1;
|
|
refCount = 1;
|
|
nodeKind = UNKNOWN;
|
|
}*/
|
|
|
|
XdmNode(jobject);
|
|
|
|
XdmNode(XdmNode *parent, jobject, XDM_NODE_KIND);
|
|
|
|
virtual ~XdmNode(){
|
|
delete baseURI;
|
|
delete nodeName;
|
|
|
|
//There might be potential issues with children and attribute node not being deleted when the parent node has been deleted
|
|
//we need to track this kind of problem.
|
|
}
|
|
|
|
virtual bool isAtomic();
|
|
|
|
|
|
XDM_NODE_KIND getNodeKind();
|
|
|
|
/**
|
|
* Get the name of the node, as a string in the form of a EQName
|
|
*
|
|
* @return the name of the node. In the case of unnamed nodes (for example, text and comment nodes)
|
|
* return null.
|
|
*/
|
|
const char * getNodeName();
|
|
|
|
const char* getBaseUri();
|
|
|
|
|
|
XdmValue * getTypedValue();
|
|
|
|
XdmNode* getParent();
|
|
|
|
|
|
const char* getAttributeValue(const char *str);
|
|
|
|
int getAttributeCount();
|
|
|
|
XdmNode** getAttributeNodes();
|
|
|
|
|
|
XdmNode** getChildren();
|
|
|
|
int getChildCount();
|
|
|
|
/**
|
|
* Get the type of the object
|
|
*/
|
|
XDM_TYPE getType(){
|
|
return XDM_NODE;
|
|
}
|
|
|
|
// const char* getOuterXml();
|
|
|
|
|
|
|
|
private:
|
|
const char * baseURI;
|
|
const char * nodeName;
|
|
XdmNode ** children; //caches child nodes when getChildren method is first called;
|
|
int childCount;
|
|
XdmNode * parent;
|
|
XdmNode ** attrValues;//caches attribute nodes when getAttributeNodes method is first called;
|
|
int attrCount;
|
|
XDM_NODE_KIND nodeKind;
|
|
|
|
};
|
|
|
|
#endif
|