0

DOMNode をあるドキュメントから別のドキュメントに移動しています。ここでコードスナップ

        XercesDOMParser *parser = new XercesDOMParser;
        parser->setValidationScheme(XercesDOMParser::Val_Auto);
        parser->setDoNamespaces(false);
        parser->setDoSchema(false);
        parser->setValidationSchemaFullChecking(false);
        parser->setCreateEntityReferenceNodes(false);

        // getDOMNodeForXMLString will pares the string and return the root DOMNode
        DOMNode* vendorExtnDomNode =  getDOMNodeForXMLString(*veField,parser);

       DOMNodeList* childList = vendorExtnDomNode->getChildNodes();
        if(childList)
        {
            DOMNode* childNode = NULL;
            for(childNode = vendorExtnDomNode->getFirstChild();childNode != NULL;childNode = childNode->getNextSibling())
            {
                DOMElement* newChild = (DOMElement*) Doc->importNode(childNode,true);
                veDomNode->appendChild(newChild);
            }
        }
        parser->resetDocumentPool();
        delete parser

xml 文字列が以下のような場合は、Doc に追加します

< my:root>
        < my:values>
                        < my:value1>10< /my:value1>
        < /my:values>
< /my:root>

しかし、文字列がこのようなものであれば

< my:root>
            < my:values>
                            < my:value1>10< /my:value1>
                            < my:enum>
                                            < my:value2>10< /my:value1>     
                            < /my:enum>
            < /my:values>
< /my:root

次に、xml ダンプで以下のように最初のレベルの階層文字列のみを表示できます。リセットが欠落している理由

< my:root>
            < my:values>
                            < my:value1>10< /my:value1>
            < /my:values>
< /my:root>

注: タグ内の空白は無視してください

4

1 に答える 1

0

解析中の文字列には、タグ間に空白文字 '\n' (改行)、'\t' (タブ)、および ' ' (スペース) が含まれています。テキストノードとして解析され、DOM ツリーに追加されます。これにより、xml のダンプ時に問題が発生します。パーサー プロパティ includeWhiteSpace を false に設定できる空白は避けてください。

parser->setIncludeIgnorableWhitespace (false)

ただし、空白を含む要素がテキストをコンテンツとして受け入れないことを示すDTDまたはスキーマに対して検証している場合にのみ、空白は「無視できます」。検証していない場合、または要素が混合コンテンツとして宣言されている場合、空白はドキュメントのコンテンツの一部です。

あなたの場合、検証チェックはありません。したがって、ノードを子として追加する前に、すべてのノードを反復処理し、空白、タブ、および '/n' のみに基づくデータを持つテキスト ノード (DOMNode::TEXT_NODE) を削除することができます。これで問題は解決します。

于 2013-02-27T05:22:15.813 に答える