1

テーブルから新しいXMLファイルを作成しています。問題は、ルートノードの子に属性xmlnsを持たせたくないことです。これは自動的に発生し、正しくありません。ルート要素に属性がある場合、どのようにそこに到達しても、子ノードに配置されます。どうすればそれを取り除くことができますか?

A

ローカル名DataTypeサブタイプ長さ

L_DataXML Automation 'Microsoft XML, v6.0'.DOMDocument60 
L_XMLElement Automation 'Microsoft XML, v6.0'.IXMLDOMElement 
L_XMLAttribute Automation 'Microsoft XML, v6.0'.IXMLDOMAttribute 
L_XMLNode Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderHeader Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderItemList Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderSummary Automation 'Microsoft XML, v6.0'.IXMLDOMNode 

C/ALコード

L_DataXML.loadXML('<ORDER xmlns="test"/>');

L_XMLNode := L_DataXML.documentElement;

L_XMLOrderHeader := L_DataXML.createNode(1,'ORDER_HEADER','');
L_XMLNode.appendChild(L_XMLOrderHeader);

XML

<?xml version="1.0"?>
<ORDER xmlns="test">
    <ORDER_HEADER xmlns=""/>
</ORDER>
4

3 に答える 3

0

私も少し前にこの問題を抱えていました。残念ながら、XMLDOMを使用してそれを防ぐ方法はありません。私の回避策は、エラーのあるXMLファイルを作成し、それをbigtext変数にロードして、xmlns=""を消去しながらループすることでした。

コード:

XMLFile.TEXTMODE(FALSE);
XMLFile.OPEN(SavePath);
XMLFile.CREATEINSTREAM(InStream);
InputText.READ(InStream);
XMLFile.CLOSE;

TextToFind := 'xmlns=""';
TextPos := InputText.TEXTPOS(TextToFind);
WHILE TextPos <> 0 DO BEGIN
  InputText.GETSUBTEXT(SubText, 1, TextPos - 1);
  OutputText.ADDTEXT(SubText);
  InputText.GETSUBTEXT(InputText, TextPos + STRLEN(TextToFind));
  TextPos := InputText.TEXTPOS(TextToFind);
END;
OutputText.ADDTEXT(InputText);

XMLFile.TEXTMODE(FALSE);
XMLFile.CREATE(SavePath);
XMLFile.CREATEOUTSTREAM(OutStream);
OutputText.WRITE(OutStream);
XMLFile.CLOSE;

変数

Name    DataType    Subtype Length
XMLFile File        
InStream    InStream        
OutStream   OutStream       
InputText   BigText     
OutputText  BigText     
SubText BigText     
TextPos Integer     
TextToFind  Text        30
SavePath    Text        1024

それが役に立てば幸い

于 2012-03-22T13:05:07.047 に答える
0

答えてくれてありがとう。それは本当ですそれを取り除く方法はありません!しかし、少なくともファイルのバリエーションを許可するための回避策を見つけました。ルートからデフォルトの名前空間を追加すると、ドキュメントが有効になります。

<?xml version="1.0"?>
<ORDER xmlns="test">
    <ORDER_HEADER xmlns="test"/>
</ORDER>

他の誰かが遭遇する可能性のある別の問題は、2番目の名前空間でした

<?xml version="1.0"?>
<ORDER xmlns="test" xmlns:second="second-test">
    <ORDER_HEADER xmlns="test">
          <second:TAG/>
    </ORDER_HEADER>
</ORDER>

最初は、2番目の名前空間が見つからないため、エラーが発生します。名前空間URIをAddFuncitonに追加するだけで、もう文句を言うことはありません。

乾杯

于 2012-03-26T21:46:36.987 に答える
0

createNodeメソッドを使用する場合は、親ノードのnamespaceURIを使用してください。L_XMLOrderHeader:= L_DataXML.createNode(1、'ORDER_HEADER'、L_DataXML.namespaceURI);に変更すると、おそらく機能するはずです。

于 2016-09-25T14:45:20.863 に答える