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

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

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

No.19689 の関連記事表示

<< 0 >>
■19689  XMLのプレフィックスの出力につきまして
□投稿者/ ishikawa -(2008/05/27(Tue) 19:38:25)

    分類:[XML] 

    初めて質問させていただきます。
    よろしくお願い致します。

    Linqを用いて、以下のような XMLを出力しようとしております。

    <SampleXML xmlns="http://www.tempuri.org1"
    xmlns:aaa="http://www.tempuri.org2"
    bbb:ccc=" http://www.tempuri.org3" >  ←問題の箇所です(bbb:)
    (以下略)

    問題となっているのが、属性の名前空間のところです。

    XNamespace ns = "http://www.tempuri.org1";
    XName problem;
    XElement pSample = new XElement("SampleXML",
    new XAttribute("xmlns", "http://www.tempuri.org1"),
    new XAttribute(XNamespace.Xmlns + "aaa", "http://www.tempuri.org2"),
    new XAttribute(problem, "http://www.tempuri.org3")); ←問題の箇所です

    属性の名前空間は、XName で指定される必要があります。
    XName は、皆様ご存知の通り、コンストラクタを持たず、
    文字列を指定することで、通常、設定できてしまいます。

    しかし、名前空間を持つ場合、どのように記述すればよろしいでしょうか。

    new XAttribute("bbb:ccc", "http://www.tempuri.org3")

    というような記述は、当然ながら、エラーになってしまいます。
    (勝手にコロンを記入されては、おかしくなってしまいますので・・・。)
    ですが、下記のように記述すると、

    XNamespace ns = "http://www.tempuri.org1";
    XNamespace ddd;
    (中略)
    XName problem = ddd + "ccc";
    XElement pSample = new XElement("SampleXML",
    new XAttribute("xmlns", "http://www.tempuri.org1"),
    new XAttribute(XNamespace.Xmlns + "aaa", "http://www.tempuri.org2"),
    new XAttribute(problem, "http://www.tempuri.org3"));

    pSample.ToString()とした場合、

    <SampleXML xmlns="http://www.tempuri.org1"
    xmlns:aaa="http://www.tempuri.org2"
    p0:ccc=" http://www.tempuri.org3" >  ←p0

    と出力されてしまいます。
    (名前を指定していないためか、"p0"という出力になってしまいます。)

    XName はXNamespaceと自身の名称からなっているわけですが、
    XNamespaceの「呼び名」を指定する(bbb:というように)ことは可能でしょうか?
    XNamespace.Xmlnsであれば、自動的に"xmlns:"と出力してくれるのですが、
    それにあたる文字列は、どうすれば設定できますでしょうか。

    よろしければ、アドバイスをいただければと思います。
    どうか宜しくお願い致します。
親記事 /過去ログ38より / 関連記事表示
削除チェック/

■19692  Re[1]: XMLのプレフィックスの出力につきまして
□投稿者/ 魔界の仮面弁士 -(2008/05/27(Tue) 20:06:40)
記事No.19689 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19694  Re[2]: XMLのプレフィックスの出力につきまして
□投稿者/ ishikawa -(2008/05/27(Tue) 21:19:29)
    No19692 (魔界の仮面弁士 さん) に返信
    >>Linqを用いて、以下のような XMLを出力しようとしております。
    >><SampleXML xmlns="http://www.tempuri.org1" 
    >>xmlns:aaa="http://www.tempuri.org2"  
    >>bbb:ccc=" http://www.tempuri.org3" >   ←問題の箇所です(bbb:)
    > 
    > その場合、自身もしくは親要素に xmlns:bbb="〜" が必要になるのでは。
    > 
    > 試しに VB で、
    >   Dim x = <SampleXML xmlns="http://www.tempuri.org1" 
    >             xmlns:aaa="http://www.tempuri.org2"  
    >             bbb:ccc=" http://www.tempuri.org3" />
    > と書いてみたら、
    >  「error BC31148: XML 名前空間プレフィックス 'bbb' が定義されていません。」
    > になりましたから、C# でも同じことかと。
    
    早速お応えくださり、ありがとうございます。
    
    上記の例は、すみません、実際のプログラムを隠しすぎて、
    変な書き方になってしまっていました。
    実際は、ご指摘の箇所は、こうなっています。
    
    xmlns:xsi="http://www.tempuri.org2"
    xsi:schemaLocation=" http://www.tempuri.org3" >
    
    ですので、"xsi"は定義しているのですが・・・。
    紛らわしい書き方をして申し訳ございません。
    
    なお、コードはC#で記述しております。
    (VBで試しに書いてみるのも手段かもしれませんが・・・。)
    
    まだ問題解決はできておりませんが、とにかく、ありがとうございます。
記事No.19689 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19696  Re[3]: XMLのプレフィックスの出力につきまして
□投稿者/ 魔界の仮面弁士 -(2008/05/27(Tue) 21:56:50)
記事No.19689 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19699  Re[4]: XMLのプレフィックスの出力につきまして
□投稿者/ ishikawa -(2008/05/27(Tue) 23:12:52)
    魔界の仮面弁士様、早速の回答、ありがとうございます。

    大変申し訳ないことに、自宅に、Visual Studio 2008 を実行できる環境がございません。
    (自宅は未だにWindows2000のためです。)
    明日、出勤致しましたら、早速参考にさせていただきます。
    (できれば、なぜうまくいかないかの検証もお返事できればと思っております。)

    ありがとうございました。
記事No.19689 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19709  Re[5]: XMLのプレフィックスの出力につきまして
□投稿者/ ishikawa -(2008/05/28(Wed) 10:18:38)
    魔界の仮面弁士様、改めてありがとうございます。

    いただいたサンプルですが、正常に動作しました。
    それで、ここまで私が解決できなかった理由ですが・・・。

    昨夜拝見した時点では、

    「同じ実装はしていたはずなのに、その場合、XAttributeの該当箇所の
    プレフィックスは、デバッガで見たところ、[p0]と表示されてしまい、つまりは、
    p0:schemaLocation=" http://www.tempuri.org3"
    というXAttributeの値になってしまうのに、これでいいのだろうか」

    と悩んでおりました。

    蓋を開けてみれば簡単なお話で、[p0]というのは、システムによって
    XElementに含まれるまでの、仮に割り当てられた値だった、ということです。
    つまり、最終的に出力される時には、ちゃんと[p0]は[xsi]になっておりました。

    デバッガに頼りすぎず、普通に動作させれば、はまり込むこともなかったと反省するばかりです。

    お答えくださり、ありがとうございました。
記事No.19689 のレス / END /過去ログ38より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -