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

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

C# と VB.NET の入門サイト

Re[5]: XMLの『xsi:type』について


(過去ログ 32 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■15391 / inTopicNo.1)  XMLの『xsi:type』について
  
□投稿者/ ATM (1回)-(2008/03/12(Wed) 10:52:34)

分類:[.NET 全般] 

現在、VB2005でスキーマを利用しXMLを作成するプログラムを作成しているんですが
どうしてもうまくいかない点があるのでご質問させてください

作成したいXML属性の一部に[xsi:type]という部分を記述したいんですが
単純に SetAttribute("xsi:type", 値) では作成されないのでしょうか?

〜 以下が抜粋したソース部分です 〜

Dim objXmlDocument As XmlDocument
Dim objXmlElement_ChildeNode As XmlElement = Nothing

objXmlElement_ChildeNode = objXmlDocument.CreateElement("ANS")
objXmlElement_ChildeNode.SetAttribute("xsi:type", "INT")
objXmlElement_ChildeNode.SetAttribute("value", "500")

〜 出力結果 〜
<ANS type="INT" value="500" />
   ↑
この部分を[xsi:type]と表示したい

ご存知でしたらご教示お願いします

引用返信 編集キー/
■15393 / inTopicNo.2)  Re[1]: XMLの『xsi:type』について
□投稿者/ 魔界の仮面弁士 (676回)-(2008/03/12(Wed) 11:37:06)
No15391 (ATM さん) に返信
> 作成したいXML属性の一部に[xsi:type]という部分を記述したいんですが
> 単純に SetAttribute("xsi:type", 値) では作成されないのでしょうか?

xsi の名前空間を指定する必要がありますので、
SetAttribute(String, String) ではなく、
SetAttribute(String, String, String) を使ってみてください。
引用返信 編集キー/
■15398 / inTopicNo.3)  Re[2]: XMLの『xsi:type』について
□投稿者/ ATM (2回)-(2008/03/12(Wed) 12:08:57)
2008/03/12(Wed) 12:09:29 編集(投稿者)
2008/03/12(Wed) 12:09:26 編集(投稿者)

No15393 (魔界の仮面弁士 さん) に返信
> ■No15391 (ATM さん) に返信
>>作成したいXML属性の一部に[xsi:type]という部分を記述したいんですが
>>単純に SetAttribute("xsi:type", 値) では作成されないのでしょうか?
>
> xsi の名前空間を指定する必要がありますので、
> SetAttribute(String, String) ではなく、
> SetAttribute(String, String, String) を使ってみてください。

ご返答ありがとうございます

XMLのヘッダ部分で
xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
と指定するので名前空間を「urn:hl7-org:v3」として以下のように変更しました

Dim objXmlDocument As XmlDocument
Dim objXmlElement_ChildeNode As XmlElement = Nothing
Dim strNAMESPACE As String = "urn:hl7-org:v3"

objXmlElement_ChildeNode = objXmlDocument.CreateElement("ANS", strNAMESPACE )
objXmlElement_ChildeNode.SetAttribute("type", strNAMESPACE, "INT")
objXmlElement_ChildeNode.SetAttribute("value", "500")

出力結果なのですが
<ANS d11p1:type="INT" value="500" xmlns:d11p1="urn:hl7-org:v3" />

こうなるのですが意味は同じなのでしょうか?

それとも名前空間の指定が間違っているのでしょうか?
引用返信 編集キー/
■15402 / inTopicNo.4)  Re[3]: XMLの『xsi:type』について
□投稿者/ シャノン (314回)-(2008/03/12(Wed) 14:34:26)
No15398 (ATM さん) に返信
> XMLのヘッダ部分で
> xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> と指定するので名前空間を「urn:hl7-org:v3」として以下のように変更しました

> 出力結果なのですが
> <ANS d11p1:type="INT" value="500" xmlns:d11p1="urn:hl7-org:v3" />
>
> こうなるのですが意味は同じなのでしょうか?

違いますよね。
type は http://www.w3.org/2001/XMLSchema-instance 名前空間に属さなければなりませんが、この例では urn:hl7-org:v3 名前空間に属してしまっています。
プリフィックスが xsi でなくとも、xmlns に指定されているものと同じであれば、例えば

<ANS d11p1:type="INT" value="500" xmlns:d11p1="http://www.w3.org/2001/XMLSchema-instance" />

なら正しいです。
ですから、

> objXmlElement_ChildeNode.SetAttribute("type", strNAMESPACE, "INT")

これの第2引数は、http://www.w3.org/2001/XMLSchema-instance でなければなりません。

プリフィックス部分は何であっても、xmlnsと合っていればよいのですが、「xsi」でないと気持ち悪いという場合は、SetAttribute の代わりに CreateAttribute を使えば、プリフィックスも指定することができます。
引用返信 編集キー/
■15403 / inTopicNo.5)  Re[4]: XMLの『xsi:type』について
□投稿者/ Hongliang (255回)-(2008/03/12(Wed) 14:56:10)
> プリフィックス部分は何であっても、xmlnsと合っていればよいのですが、「xsi」でないと気持ち悪いという場合は、SetAttribute の代わりに CreateAttribute を使えば、プリフィックスも指定することができます。

祖先の要素で同一の名前空間を接頭辞つきで定義していれば、自動的に同じ接頭辞で書き出してくれます。
引用返信 編集キー/
■15404 / inTopicNo.6)  Re[5]: XMLの『xsi:type』について
□投稿者/ シャノン (315回)-(2008/03/12(Wed) 14:57:47)
No15403 (Hongliang さん) に返信
>>プリフィックス部分は何であっても、xmlnsと合っていればよいのですが、「xsi」でないと気持ち悪いという場合は、SetAttribute の代わりに CreateAttribute を使えば、プリフィックスも指定することができます。
>
> 祖先の要素で同一の名前空間を接頭辞つきで定義していれば、自動的に同じ接頭辞で書き出してくれます。

なるほど。
今回の失敗例では urn:hl7-org:v3 がデフォルト名前空間であったために、変な接頭辞が降られてしまったのですね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -