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

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

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

Re[6]: XQueryでデータを抽出したい


(過去ログ 25 を表示中)

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

■11531 / inTopicNo.1)  XQueryでデータを抽出したい
  
□投稿者/ りお (13回)-(2007/12/17(Mon) 13:45:15)

分類:[C#] 

いつもお世話になります。りおです。

XQueryを使ってXMLから情報を取得する方法を調べたのですが、
よく分かりませんでした。

C#にて下記XMLファイルから対象サーバが<server seq="2">の
情報(IPアドレス・ユーザID・パスワード)を取得したいですが、
どうしたらよいでしょうか。宜しくお願いします。

<?xml version="1.0" encoding="UTF-8"?>
<profile>
   <server seq="1">
       <address ipaddress="10.1.2.1" hostname="testA" />
       <logininfo userid="testA" password="testA" />
   </server>
   <server seq="2">
       <address ipaddress="10.1.2.2" hostname="testB" />
       <logininfo userid="testB" password="testB" />
   </server>
   <server seq="3">
       <address ipaddress="10.1.2.3" hostname="testC" />
       <logininfo userid="testC" password="testC" />
   </server>
</profile>

引用返信 編集キー/
■11532 / inTopicNo.2)  Re[1]: XQueryでデータを抽出したい
□投稿者/ シャノン (230回)-(2007/12/17(Mon) 13:56:31)
2007/12/17(Mon) 13:57:57 編集(投稿者)

No11531 (りお さん) に返信

C#で使えるXQueryプロセッサなんてあるのかな…
DBMSは結構実装してるみたいですけどね。SQL ServerとかOracleとか。
Microsoftはやらないだろうなぁ。Linq to XML使えって言われそう。
LinqとかXPathではダメですか? どうしてもXQuery?

それとも、プロセッサは既に用意できていて、XQueryの書き方がわからないって言う話ですか?
引用返信 編集キー/
■11534 / inTopicNo.3)  Re[2]: XQueryでデータを抽出したい
□投稿者/ りお (14回)-(2007/12/17(Mon) 14:32:23)
シャノンさん

ありがとうございます。XQueryでやるのだと思ってました…。
XQueryということにこだわっていません。。XMLから抽出する方法が知りたいのです^^;

LinqとかXPathではどのように実現するのでしょうか。
調べてみますが、ご教示いただきたく宜しくお願いします。

引用返信 編集キー/
■11535 / inTopicNo.4)  Re[2]: XQueryでデータを抽出したい
□投稿者/ tororo (1回)-(2007/12/17(Mon) 14:41:15)
取得するだけなら、XQueryを使用しなくても、XPathでいけると思います。

VBですが、C#でも同じだと思いますので、試してみてください。

Dim obj As New Xml.XmlDocument
Dim node as xmlNode
Dim xpath as String

xpath = "profile/server[@seq='2']"

obj.load(ファイル名)    'ファイルから読み込む場合
obj.loadXML(xml文字列)   '文字列を読み込む場合

node = obj.selectSingleNode(xpath)

で、希望の情報ノードへアクセスできます。



引用返信 編集キー/
■11542 / inTopicNo.5)  Re[3]: XQueryでデータを抽出したい
□投稿者/ りお (15回)-(2007/12/17(Mon) 17:47:10)
tororoさん

ありがとうございます。
C#にて試していましたが、、

XmlDocument doc = new XmlDocument();
doc.Load(PROFMS);
XmlNode list = doc.SelectSingleNode("profile/server[@seq='2']");
・・・

このあとでアドレス・ホスト名・ユーザID・パスワードをどうやって
取得できますか?
ここまで教えてもらいながら分からないのも恥ずかしいですが(^^;
宜しくお願いします。
引用返信 編集キー/
■11553 / inTopicNo.6)  Re[4]: XQueryでデータを抽出したい
□投稿者/ THREE-ONE (19回)-(2007/12/17(Mon) 22:10:02)
XmlNode に対しても SelectSingleNode などは利用できますよ。
ChildNodes プロパティなどからも取得できるでしょうから試してみてください。
引用返信 編集キー/
■11558 / inTopicNo.7)  Re[5]: XQueryでデータを抽出したい
□投稿者/ επιστημη (723回)-(2007/12/17(Mon) 23:17:56)
επιστημη さんの Web サイト
> XmlNode に対しても SelectSingleNode などは利用できますよ。
> ChildNodes プロパティなどからも取得できるでしょうから試してみてください。

そゆわけで、見つけたXmlNodeに対してさらにXPathで絞り込んでもいいし、
ChildNodesを列挙して探してもいいし、GetElementsByTagNameかましてもいいし。

引用返信 編集キー/
■11625 / inTopicNo.8)  Re[6]: XQueryでデータを抽出したい
□投稿者/ りお (16回)-(2007/12/19(Wed) 12:36:07)
THREE-ONEさん、επιστημηさん
アドバイスありがとうございます。
やっと出来ました☆ソースをのせておきます^^;

using System.Xml;    //XmlDocumentsクラス

string strIpaddress = "";
string strHostname = "";
string strUserid = "";
string strPassword = "";

// XmlDocumentオブジェクトを作成
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:/PROFMS.xml");

try 
{
    // 要素を抽出し取得
    XmlNode root = xmlDoc.SelectSingleNode("profile/server[@seq='2']");
    XmlElement xmlRoot = (XmlElement)root;

    // <address>要素の属性値を取得
    XmlNodeList xmlAddressNode = xmlRoot.GetElementsByTagName("address");
    XmlElement xmlAddress = (XmlElement)xmlAddressNode.Item(0);
    strIpaddress = xmlAddress.GetAttribute("ipaddress");
    strHostname  = xmlAddress.GetAttribute("hostname");

    // <logininfo>要素の属性値を取得
    XmlNodeList xmlLogininfoNode = xmlRoot.GetElementsByTagName("logininfo");
    XmlElement xmlLogininfo = (XmlElement)xmlLogininfoNode.Item(0);
    strUserid   = xmlLogininfo.GetAttribute("userid");
    strPassword = xmlLogininfo.GetAttribute("password");
}
catch (System.Xml.XmlException Ex) 
{
    Console.WriteLine(Ex.Message);
}

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -