![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |

SophiaFramework では、W3C ( World Wide Web Consortium ) で定義される 12 種類のノードに対応する、 以下の 12 のクラスを使って DOM ツリーを構築して XML 文書を処理します。 これらのクラスは SFXXMLNode クラスを継承します。
| クラス名 | ノードの種類 | ノード タイプ ( nodeType 属性 ) | ノードの名前 ( nodeName 属性 ) | ノードの値 ( nodeValue 属性 ) | 属性 ( attributes 属性 ) |
|---|---|---|---|---|---|
| SFXXMLAttribute | Attribute ノード | ATTRIBUTE_NODE | 属性名 | 属性値 | null |
| SFXXMLCDATASection | CDATASection ノード | CDATA_SECTION_NODE | "#cdata-section" | CDATA セクションの内容 | null |
| SFXXMLComment | Comment ノード | COMMENT_NODE | "#comment" | コメントの内容 | null |
| SFXXMLDocument | Document ノード | DOCUMENT_NODE | "#document" | null | null |
| SFXXMLDocumentFragment | DocumentFragment ノード | DOCUMENT_FRAGMENT_NODE | "#document-fragment" | null | null |
| SFXXMLDocumentType | DocumentType ノード | DOCUMENT_TYPE_NODE | 文書型名 | null | null |
| SFXXMLElement | Element ノード | ELEMENT_NODE | タグ名 | null | 属性の集合(SFXXMLNode::DOMNamedNodeMap 型) |
| SFXXMLEntity | Entity ノード | ENTITY_NODE | エンティティ名 | Entity ノードの値 | null |
| SFXXMLEntityReference | EntityReference ノード | ENTITY_REFERENCE_NODE | 参照されるエンティティ名 | null | null |
| SFXXMLNotation | Notation ノード | NOTATION_NODE | 記法の名前 | null | null |
| SFXXMLProcessingInstruction | ProcessingInstruction ノード | PROCESSING_INSTRUCTION_NODE | ターゲット | 処理命令の内容(ターゲット以外) | null |
| SFXXMLText | Text ノード | TEXT_NODE | "#text" | テキストの内容 | null |
![]() |
注意 |
|---|---|
| nodeType, nodeName, nodeValue 属性の値は、それぞれ SFXXMLNode::GetNodeType, SFXXMLNode::GetNodeName, SFXXMLNode::GetNodeValue 関数で取得できます。 | |
![]() |
注意 |
|---|---|
| attributes 属性の値は、Element ノードに対してのみ有効で SFXXMLElement::GetAttributes 関数で取得できます。 | |
![]() |
Document Object Model ( DOM ) の仕様 |
|---|---|
W3C DOM レベル 1 勧告 : Document Object Model Level 1 Specification | |
SFXXMLAttribute | SFXXMLCDATASection | SFXXMLComment | SFXXMLDocument | SFXXMLDocumentFragment | SFXXMLDocumentType | SFXXMLElement | SFXXMLEntity | SFXXMLEntityReference | SFXXMLNode | SFXXMLNotation | SFXXMLProcessingInstruction | SFXXMLText
| コンストラクタ/デストラクタ |
|---|
|
SFXXMLNode(
SFXXMLDocumentPtr owner
) SFXXMLNode クラスのコンストラクタです。
|
|
SFXXMLNode( Void ) SFXXMLNode クラスのコンストラクタです。
|
|
~SFXXMLNode( Void ) SFXXMLNode クラスのデストラクタです。
|
| 型 |
|---|
|
DOMNamedNodeMap 複数の DOM ノードを名前で管理するためのクラスです。
|
|
DOMNodeList 複数の DOM ノードをリスト形式で管理するためのクラスです。
|
|
NodeType
ノード タイプの数値です。
|
[ public, explicit ]
SFXXMLNode(
SFXXMLDocumentPtr owner // このノードを所有する Document ノード
);
[ protected, explicit ] SFXXMLNode(Void);
[ public, virtual ] virtual ~SFXXMLNode(Void);
[ public, virtual ] SFCError AppendChild( SFXXMLNodeConstPtr newchild // 追加するノード );
SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore
[ public, virtual ] SFCError CloneNode( SFXXMLNodeHandle clonenode // コピー先のノード( Handle 型 ) Bool deep // 子ノードが再帰的にコピーされるかどうか );
SFERR_UNSUPPORTED を返します。
SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::AppendChild | SFXXMLNode::InsertBefore
[ public, virtual, const ] Bool EqualNode( SFXXMLNodeConstPtr arg // 比較するノード );
SFXXMLNode::EqualNode 関数は、ノードの同一性 ( ノードへの参照で同じであるかどうか ) ではなく、 ノードの同等性 ( ノードの内容が同じであるかどうか ) を判定します。
同一性の判定には SFXXMLNode::IsSameNode 関数を使います。
[ public, virtual, const ] DOMNodeListPtr GetChildNodes(Void);
null を返します。
すべての子ノードを SFXXMLNode::DOMNodeList 形式で取得します。
![]() |
注意 |
|---|---|
| SFXXMLNode::DOMNodeList の各要素は、SFXXMLNode 型へのポインターです。 | |
SFXXMLNode::DOMNodeList | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetNextSibling | SFXXMLNode::GetParentNode | SFXXMLNode::GetPreviousSibling
[ public, virtual, const ] SFXXMLNodePtr GetFirstChild(Void);
null を返します。
SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetParentNode
[ public, virtual, const ] SFXXMLNodePtr GetLastChild(Void);
null を返します。
SFXXMLNode::GetFirstChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetParentNode
[ public, virtual, const ] SFXXMLNodePtr GetNextSibling(Void);
null を返します。
SFXXMLNode::GetPreviousSibling | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetParentNode
[ public, virtual, const ] ACharConstPtr GetNodeName(Void);
null を返します。
![]() |
ノードの名前 |
|---|---|
|
ノードの名前とは nodeName 属性値のことです。ノード タイプによって内容が異なります。 ( 例 ) Element ノードの場合は、タグの名前です。Text ノードの場合は、null です。 | |
[ public, virtual, const ] NodeType GetNodeType(Void);
UNKNOWN_NODE を返します。
![]() |
ノード タイプ | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ノード タイプとは nodeType 属性値のことです。ノードの種類によって内容が異なります。 ノード タイプの値は、W3C DOM レベル 1 勧告 ( Document Object Model (DOM) Level 1 Specification ) の NodeType の一覧に記載されている数値と同じです。
| |||||||||||||||||||||||||||||
[ public, virtual, const ] ACharConstPtr GetNodeValue(Void);
null を返します。
![]() |
ノードの値 |
|---|---|
|
ノードの値とは nodeValue 属性値のことです。ノード タイプによって内容が異なります。 ( 例 ) Text ノードの場合は、ノードのテキストです。Element ノードの場合は、null です。 | |
[ public, virtual, const ] SFXXMLNodePtr GetParentNode(Void);
null を返します。
親ノードがない場合は、null を返します。( DOM ツリーに追加されていないノード、あるいは DOM ツリーから削除されたノード )
Attribute ノード、Document ノード、DocumentFragment ノード、Entity ノード、および Notation ノード以外のノードは、必ず親ノードを持ちます。
SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetNextSibling | SFXXMLNode::GetPreviousSibling
[ public, virtual, const ] SFXXMLNodePtr GetPreviousSibling(Void);
null を返します。
前の兄弟ノードを取得します。前の兄弟ノードがないときは null を返します。
SFXXMLNode::GetNextSibling | SFXXMLNode::GetFirstChild | SFXXMLNode::GetLastChild | SFXXMLNode::GetChildNodes | SFXXMLNode::GetParentNode
[ public, const ] SFXAnsiString GetText(Void);
戻り値のテキストは、ノードのタイプによって異なります。
| ノードのタイプ | 戻り値 |
|---|---|
| Attribute, Element, Entity, EntityReference, DocumentFragment | Comment ノードと Processing Instruction ノードを除く、すべての子ノードのノード テキストの連接を返します。子ノードが存在しない場合は、空の文字列を返します。 |
| Text, CDATASection, Comment, ProcessingInstruction | GetNodeValue 関数の戻り値と同じです。( nodeValue 属性値を返します。) |
| Document, DocumentType, Notation | null を返します。 |
![]() |
注意 |
|---|---|
| ノード テキストにはマークアップは含まれません。また、空白文字は正規化されません。 | |
[ public, virtual, const ] Bool HasChildNodes(Void);
[ public, virtual ] SFCError InsertBefore( SFXXMLNodeConstPtr newchild // 挿入するノード SFXXMLNodeConstPtr refchild // 参照ノード、このノードの直前に挿入される );
SFERR_UNSUPPORTED を返します。
SFXXMLNode::RemoveChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::AppendChild
[ public, virtual, const ] Bool IsSameNode( SFXXMLNodeConstPtr other // 比較するノード );
2 つのノードが同じノードを参照するかどうかを判定します。
[ public, virtual ] SFCError RemoveChild( SFXXMLNodeConstPtr oldchild // 削除するノード );
SFERR_UNSUPPORTED を返します。
// 最後の子ノードを取得する SFXXMLNodePtr publisher = book->GetLastChild(); // その子ノードを削除する book->RemoveChild(publisher);
SFXXMLNode::AppendChild | SFXXMLNode::ReplaceChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore
[ public, virtual ] SFCError ReplaceChild( SFXXMLNodeConstPtr newchild // 置換後ノード SFXXMLNodeConstPtr oldchild // 置換前ノード );
SFERR_UNSUPPORTED を返します。
SFXXMLNode::AppendChild | SFXXMLNode::RemoveChild | SFXXMLNode::CloneNode | SFXXMLNode::InsertBefore
[ public, virtual ] Void SetNodeValue( ACharConstPtr value // ノードの値 );
[ public ] SFCError SetText( SFXAnsiStringConstRef text // 設定するノード テキスト );
SFXXMLNode::SetText 関数の動作は、ノードのタイプによって異なります。
| ノードのタイプ | 解説 |
|---|---|
| Attribute, Element, Entity, EntityReference, DocumentFragment | 子ノードをすべて削除し、引数で指定したノード テキストを nodeValue 属性値として持つ Text ノードを子ノードとして追加します。 |
| Text, CDATASection, Comment, ProcessingInstruction | SetNodeValue 関数と同等です。( nodeValue 属性値として引数に指定したノード テキストを設定します ) |
| Document, DocumentType, Notation | 無効です。( 何も処理されません ) |
[ public ]
SFMTYPEDEFCLASS(DOMNamedNodeMap)
class DOMNamedNodeMap {
friend class SFXXMLElement;
friend class SFXXMLDocumentType;
private:
SFXXMLNodePtr _ownerNode;
DOMNodeList _namenodelist;
public:
explicit DOMNamedNodeMap (Void);
~DOMNamedNodeMap (Void);
public:
SFXXMLNodePtr Item (SInt32 index) const;
SInt32 GetLength (Void) const;
SFXXMLNodePtr GetNamedItem (SFXAnsiStringConstRef name) const;
Void Merge (DOMNamedNodeMapConstRef nodeMap);
SFXXMLNodePtr RemoveNamedItem (SFXAnsiStringConstRef name);
SFCError SetNamedItem (SFXXMLNodeConstPtr arg);
protected:
inline Void SetOwnerNode (SFXXMLNodePtr node) { _ownerNode = node; }
};
複数の DOM ノードを管理するためのクラスです。名前(nodeName 属性値)でノードを取得できる機能を提供します。
SFXXMLNode::DOMNamedNodeMap クラスのインスタンスに格納されたノード間には順序関係はありませんが、インデックスを指定してノードにアクセスすることも可能です。
SFXXMLNode::DOMNamedNodeMap クラスは、以下のメンバ関数を持ちます。
| Item | マップの index 番目の項目を返します。 |
| GetLength | マップのノード数を取得します。 |
| GetNamedItem | 指定した名前のノードを取得します。 |
| Merge | 指定したマップの内容を併合します。 |
| RemoveNamedItem | 指定した名前のノードをマップから削除します。 |
| SetNamedItem | ノードをマップに追加します。(ノードの名前がマップ内の既存のノードと重複する場合は、既存のノードは削除されます。) |
![]() |
注意 |
|---|---|
| 上の表で、名前は nodeName 属性値( SFXXMLNode::GetNodeName 関数で取得できるノードの名前 )を表します。 | |
// 解析対象の XML 文書( apple.xml )
<fruit>
<name made="japan" date="2007-06-20" size="XS">apple</name>
</fruit>
SFXXMLNode::DOMNamedNodeMap クラスを使ったサンプルコードです。
SFCError error; // エラー値 SFXXMLDOMParser parser; // DOM パーサー SFXAnsiString resultString; // Attribute ノードの値を格納する変数 // XML 文書 "/apple.xml" を解析する if ((error = parser.Parse("/apple.xml")) == SFERR_NO_ERROR) { // DOM ツリーのルート ノードを取得する SFXXMLDocumentPtr root = parser.GetDocument(); // XML 文書のルート要素(DOM ツリーのルート ノードの最初の子ノード。この場合、fruit 要素)を取得する SFXXMLNodePtr child = root->GetFirstChild(); // fruit 要素の最初の子ノード ( name 要素 )を取得する child = child->GetFirstChild(); // name 要素のすべての Attribute ノードを取得する SFXXMLNode::DOMNamedNodeMapPtr nodeMap = SFXXMLElementPtr(child)->GetAttributes(); // Attribute ノード数を表示する(マップのノード数を表示する) TRACE("%d",nodeMap->GetLength()); // "3" が表示される for (int i = 0; i < nodeMap->GetLength(); i++) { SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する resultString = node->GetNodeValue(); // マップの i 番目の項目(Attribute ノード)の値を取得する // 取得した項目(Attribute ノード)の値を表示する TRACE("%s",resultString.GetCString()); } // name 要素のすべての属性値 "XS", "2007-06-20", "japan" が表示される // "date " という名前のノードを取得する SFXXMLAttributePtr date = static_cast<SFXXMLAttributePtr>(nodeMap->GetNamedItem( "date ")); // "date " という名前のノードの値を取得する resultString = date->GetNodeValue(); // 取得した項目(Attribute ノード)の値を表示する TRACE("%s",resultString.GetCString()); // "2007-06-20" が表示される // "made" という名前のノードをマップから削除する SFXXMLNodePtr remove = nodeMap->RemoveNamedItem("made"); // "made" という名前のノードを削除する ::delete remove; // Attribute ノード数を表示する(マップのノード数を表示する) TRACE("%d",nodeMap->GetLength()); // "2" が表示される for (int i = 0; i < nodeMap->GetLength(); i++) { SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する resultString = node->GetNodeValue(); // マップの i 番目の項目(Attribute ノード)の値を取得する // 取得した項目(Attribute ノード)の値を表示する TRACE("%s",resultString.GetCString()); } // name 要素のすべての属性値 "2007-06-20", "japan" が表示される // ノードをマップに追加する nodeMap->SetNamedItem(root->CreateAttribute("color", "red")); // Attribute ノード数を表示する(マップのノード数を表示する) TRACE("%d",nodeMap->GetLength()); // "3" が表示される for (int i = 0; i < nodeMap->GetLength(); i++) { SFXXMLNodePtr node = nodeMap->Item(i); // マップの i 番目の項目(Attribute ノード)を取得する resultString = node->GetNodeValue(); // マップの i 番目の項目(Attribute ノード)の値を取得する // 取得した項目(Attribute ノード)の値を表示する TRACE("%s",resultString.GetCString()); } // name 要素のすべての属性値 "XS" "2007-06-20" "red"が表示される }
SFMTYPEDEFALIAS(SFXList<SFXXMLNodePtr>, DOMNodeList)
SFXList<SFXXMLNodePtr> と同等です。リストに格納されたノード間には順序関係があります。
// 解析対象の XML 文書( apple.xml )
<fruit>
<name>apple</name>
<size>XS</size>
<color>red</color>
</fruit>
SFCError error; // エラー値 SFXXMLDOMParser parser; // DOM パーサー SFXAnsiString resultString; // 要素のテキストを格納する変数 // XML 文書 "apple.xml" を解析する if ((error = parser.Parse("/apple.xml")) == SFERR_NO_ERROR) { // DOM ツリーのルート ノードを取得する SFXXMLDocumentPtr root = parser.GetDocument(); // XML 文書のルート要素(DOM ツリーのルート ノードの最初の子ノード。この場合、fruit 要素)を取得する SFXXMLNodePtr child = root->GetFirstChild(); // fruit 要素のすべての子要素(子ノード)を取得する SFXXMLNode::DOMNodeListPtr nodeList = child->GetChildNodes(); // イテレータを取得する SFXXMLNode::DOMNodeList::Iterator itor = nodeList->GetFirstIterator(); // fruit 要素のすべての子ノードのテキストを表示する while (itor.HasNext()) { // name 要素、size 要素、color 要素の順に取得する SFXXMLNodePtr node = itor.GetNext(); // ノードの名前を取得する resultString = node->GetNodeName(); // ノードのテキストを取得する resultString = node->GetText(); // ノードのテキストを表示する (例: name 要素の場合は "apple") TRACE("%s",resultString.GetCString()); } }
enum NodeType {
ELEMENT_NODE = 1,
ATTRIBUTE_NODE = 2,
TEXT_NODE = 3,
CDATA_SECTION_NODE = 4,
ENTITY_REFERENCE_NODE = 5,
ENTITY_NODE = 6,
PROCESSING_INSTRUCTION_NODE = 7,
COMMENT_NODE = 8,
DOCUMENT_NODE = 9,
DOCUMENT_TYPE_NODE = 10,
DOCUMENT_FRAGMENT_NODE = 11,
NOTATION_NODE = 12,
UNKNOWN_NODE = -1
};
W3C DOM レベル 1 勧告 ( Document Object Model Level 1 Specification ) の NodeType の一覧に記載されている数値です。
|
Copyright (C) 2002 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|