C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.43454 の関連記事表示

<< 0 >>
■43454  vbでxml出力
□投稿者/ まきお -(2009/11/10(Tue) 22:41:00)

    分類:[.NET 全般] 

    vb初心者です。ネットを参考にしてコーディングしています。
    エクセル2007でxmlファイルを出力するマクロを作成についての質問です。
    DOMを使っているのですが名前空間の部分で"読み取り専用のノードを編集しようとしました"というエラーがでます。

    コード
    Dim xmlDoc As MSXML2.DOMDocument
    Dim xmlPI As MSXML2.DOMProcessingIntroduction
    Dim xmlNode As MSXML2.DOMNode
    Dim xmlAttr As MSXML2.DOMAttribute
    Dim xmStr As String

    Set xmlDoc = New MAXML2.DOMDocument
    Set xmlPI = xmlDOC.appendChild(xmlDoc.createProcessingIntroduction("xml","version=""1.0"",encording=""utf-8""))

    Set xmlNode = xmlDoc.appendChild(xmlDoc.createElement("root"))
    Set xmlAttr = xmlNode.Attributes.setNamedItem(xmlDoc.createAttribute("xmlns"))  *
    xmlAttr.NodeValue = "http://www.・・・"   ←ここでエラーがでます
    Set xmlNode = xmlDoc.appendChild(xmlDoc.createElement("child"))
    Set xmlNode = xmlDoc.appendChild(xmlDoc.createTextNode("test"))

    xmlString = xmlDoc.XML
    Debug.Print xmlString

    xmlDoc.Save("C:\・・・.xml")


    属性が"xmlns"や"xmlns:xsi"以外(IDなど)だとエラーが起こらないのですが。

    また、*の部分をsetAttributeを使って、
    Set xmlNode = xmlNode.setAttribute("xmlns","http://www.・・・")
    とすると"Functionまたは変数が必要です"というエラーがでます。

    不適切な部分もあると思いますが、
    わかる方がいらっしゃいましたらよろしくお願いいたします。


    以下、出力させたい内容です。
    <?xml version="1.0",encording="utf-8"?>
    <root xmlns="http://www.・・・">
    <child>test</child>
    </root>

    最後まで読んでいただきありがとうございました。
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43457  Re[1]: vbでxml出力
□投稿者/ やじゅ -(2009/11/10(Tue) 23:14:37)
>
    No43454 (まきお さん) に返信
    > Set xmlNode = xmlDoc.appendChild(xmlDoc.createElement("root"))
    > Set xmlAttr = xmlNode.Attributes.setNamedItem(xmlDoc.createAttribute("xmlns"))  *
    > xmlAttr.NodeValue = "http://www.・・・"   ←ここでエラーがでます

    「setNamedItem実行後にはそのNodeのNodeValueは変更できないみたいなので
    変更してからsetNamedItemを実行することになりそう」 って検索で出ました。
    http://questionbox.jp.msn.com/qa4226645.html
記事No.43454 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43459  Re[1]: vbでxml出力
□投稿者/ 魔界の仮面弁士 -(2009/11/10(Tue) 23:56:58)
    No43454 (まきお さん) に返信
    > コード
    
    Instruction(命令) が Introduction(導入)になっていたり、
    「version="1.0" encoding="utf-8"」が
    「version="1.0",encording="utf-8"」になっていたり、
    引用符が一致していなかったり、
    MSXML2 が MAXML2 になっていたり、
    xmlNode.appendChild とするべき場所で
    xmlDoc.appendChild と書いていたり、
    xmlString が宣言されていない(xmStr ならある)など、
    他にもいろいろと間違っているようです。
    
    
    > xmlAttr.NodeValue = "http://www.・・・"   ←ここでエラーがでます
    
    名前空間を指定するなら、createNode メソッドの方が楽かと。
    
    Set xmlNode = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/"))
    Set xmlNode = xmlNode.appendChild(xmlDoc.createNode(NODE_ELEMENT, "child", "http://www.example.com/"))
    xmlNode.Text = "test"
記事No.43454 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43513  Re[2]: vbでxml出力
□投稿者/ まきお -(2009/11/11(Wed) 19:58:11)
    No43457 (やじゅ さん) に返信
    > http://questionbox.jp.msn.com/qa4226645.html

    変更するということがうまくわからず断念したので
    こちらの方に質問させていただきました。
    ありがとうございます。

    No43459 (魔界の仮面弁士 さん) に返信

    コードが自宅にはないためミスばかりですみません。

    > 名前空間を指定するなら、createNode メソッドの方が楽かと。

    できました!ありがとうございます。

    追加の質問になってしまうのですが

    <root xmlns="http://www.・・・"
    xmlns:xsi="http://www.・・・"
    xsi:schemaLocation="http://www.・・・">

    としたいのですが。現在のやり方ではできないのでしょうか。
    最初から記載すればよかったのですが、よろしければお願いします。
記事No.43454 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43516  Re[3]: vbでxml出力
□投稿者/ 魔界の仮面弁士 -(2009/11/11(Wed) 20:46:06)
    2009/11/11(Wed) 22:41:17 編集(投稿者)

    No43513 (まきお さん) に返信
    >>http://questionbox.jp.msn.com/qa4226645.html
    > 変更するということがうまくわからず断念したので

    元のコードは、名前空間を指定するために
     Set xmlAttr = xmlNode.Attributes.setNamedItem(xmlDoc.createAttribute("xmlns"))
     xmlAttr.nodeValue = "http://www.example.com/"
    としてエラーとなっていますが、これは、属性ノードを要素ノードに追加してから、
    その後で属性値を変更しようとしているためです。

    この場合正しくは、
     Set xmlAttr = xmlDoc.createAttribute("xmlns")
     xmlAttr.nodeValue = "http://www.example.com/"
     xmlNode.Attributes.setNamedItem xmlAttr
    のように、まず、属性ノードに属性値をセットし終わってから、
    要素ノードに追加するようにします。


    > <root xmlns="http://www.・・・"
    > xmlns:xsi="http://www.・・・"
    > xsi:schemaLocation="http://www.・・・">
    > としたいのですが。

    たとえば、以下のように記述すれば OK です。
      Set xmlNode = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/"))
      Set xmlAttr = xmlDoc.createNode(NODE_ATTRIBUTE, "xsi:schemaLocation", "http://www.example.net/")
      xmlNode.Attributes.setNamedItem(xmlAttr).nodeValue = "http://www.yahoo.com/"


    やろうと思えば、上記を一行で書くこともできますが…流石にこれでは読みにくいですね。
      xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/")).Attributes.setNamedItem(xmlDoc.createNode(NODE_ATTRIBUTE, "xsi:schemaLocation", "http://www.example.net/")).nodeValue = "http://www.yahoo.com/"


    ところで、今回の質問は
    >>> 分類:[.NET 全般]
    として投稿されていましたが、実際には .NET に関する話題ではありませんよね。

    Excel VBA に関する内容であれば、[Microsoft Office 全般] か [VB6 以前] あたりが
    適当かと思います。次回投稿時には、分類の選択もお忘れなく。
記事No.43454 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43586  Re[4]: vbでxml出力
□投稿者/ まきお -(2009/11/13(Fri) 00:01:38)
    No43516 (魔界の仮面弁士 さん) に返信

    > この場合正しくは、
    >  Set xmlAttr = xmlDoc.createAttribute("xmlns")
    >  xmlAttr.nodeValue = "http://www.example.com/"
    >  xmlNode.Attributes.setNamedItem xmlAttr
    > のように、まず、属性ノードに属性値をセットし終わってから、
    > 要素ノードに追加するようにします。
    >
    > たとえば、以下のように記述すれば OK です。
    >   Set xmlNode = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/"))
    >   Set xmlAttr = xmlDoc.createNode(NODE_ATTRIBUTE, "xsi:schemaLocation", "http://www.example.net/")
    >   xmlNode.Attributes.setNamedItem(xmlAttr).nodeValue = "http://www.yahoo.com/"
    >

    無事にxmlファイルを出力できました。
    魔界の仮面弁士 さんには他の質問板でも説明を読ませていただき助けられました。
    とても丁寧に説明していただき本当にありがとうございます。

    ちなみに、メモ帳なのでファイルを開くと改行がない
    (文字列としているから当たり前なんですが今頃気づきました)
    んですが、改行があるものと比べるとxmlファイルとして問題あるのでしょうか?


    > ところで、今回の質問は
    > >>> 分類:[.NET 全般]
    > として投稿されていましたが、実際には .NET に関する話題ではありませんよね。

    はじめての投稿だったものですみません。
    今後気をつけます。
記事No.43454 のレス / END /過去ログ74より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -