C#でXMLファイルの情報にアクセスする方法

このQ&Aのポイント
  • C#でXMLファイルの情報にアクセスする方法について解説します。
  • XMLファイルからserverとdatadaseの属性値を取り出す方法について説明します。
  • また、複数あるpropertyの中から(value=)"sa"を取得する方法も紹介します。
回答を見る
  • ベストアンサー

C#でXMLファイルの情報にアクセスする

以下のようなXMLファイルがあったとき、serverとdatadaseの属性値を取り出す方法がわかりません。 どなたかご教授ください。 また、複数あるpropertyの中から(value=)"sa"を取得する方法もお願いします。 現在、C#で、次のようにしてXMLファイルにアクセスして、ルート要素名を取り出すことには成功しています。 ------ ソース ここから -------- XmlDocument xmlDoc = new XmlDocument(); // XmlDocumentオブジェクトを作成 xmlDoc.Load(fileName); XmlElement xmlRoot = xmlDoc.DocumentElement; Console.Write("ルート名は[" + xmlRoot.Name + "]です。\n"); --------- ソース ここまで --------- --------- ここからXMLファイル -------- <?xml version="1.0" encoding="utf-8"?> <!-- ↓これ(server)がルート名 --> <server maintenance="No"> <!-- データベース接続設定 --> <database providerInvariantName="System.Data.SqlClient" connectionString="xxxxx"> <property key="dbUrl" value="xxxxx" /> <property key="userName" value="sa" /> <property key="userPassword" value="xxxxxxxx" /> <property key="driverClass" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" /> </database> <!-- LDAP設定 --> <ldap> <!-- シングルサインオン --> <sso Password="xxxxx" SyncTime="3600" /> </ldap> </server>

  • SSMSE
  • お礼率25% (17/67)
  • XML
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

やりかたは、色々あるけど、1つの方法 ---------------------------------------------------------------- XmlNode xmlRoot = xmlDoc.DocumentElement; Console.Write("ルート名は[" + xmlRoot.Name + "]です。\n"); Console.WriteLine(xmlRoot.SelectSingleNode("/server/@maintenance").Value); Console.WriteLine(xmlRoot.SelectSingleNode("/server/database/@providerInvariantName").Value); Console.WriteLine(xmlRoot.SelectSingleNode("/server/database/@connectionString").Value); Console.WriteLine(xmlRoot.SelectSingleNode("/server/database/property/@value[../@key='userName']").Value);

関連するQ&A

  • Load出来ないXMLファイル

    いつもお世話になっております。 標題の件なのですが、VB.NETでXMLファイルから設定情報(Oracleのユーザー名やパスワード等)を取得するプログラムを作成しております。 以下がそのソースコードになります。 ※VB.NET初心者なので、ネットにあったサンプルコードを参考にしました。 --------------------------------------------------   Public Function Setting_init() As Boolean     Dim xmlDoc As New DOMDocument30     Dim Node As IXMLDOMNode     Dim myErr     Dim FileName As String     FileName = "ini.xml"     Const PATH_DTS = "//Settings/Database/DataSource"     Const PATH_UID = "//Settings/Database/UserId"     Const PATH_PSW = "//Settings/Database/Password"     Const PATH_FRM = "//Settings/Path/Form"     Const PATH_OUT = "//Settings/Path/Output"     xmlDoc.async = False     xmlDoc.resolveExternals = False     xmlDoc.load(FileName)          If (xmlDoc.parseError.errorCode <> 0) Then       myErr = xmlDoc.parseError       Setting_init = False     Else       xmlDoc.setProperty("SelectionLanguage", "XPath")       Node = xmlDoc.selectSingleNode(PATH_DTS)       G_DataSorce = Node.text       Node = xmlDoc.selectSingleNode(PATH_UID)       G_UsrId = Node.text       Node = xmlDoc.selectSingleNode(PATH_PSW)       G_PassWord = Node.text       Node = xmlDoc.selectSingleNode(PATH_FRM)       G_FormPath = Node.text       Node = xmlDoc.selectSingleNode(PATH_OUT)       G_OutPath = Node.text       Setting_init = True     End If   End Function -------------------------------------------------- ちなみにXMLファイルの内容は -------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <Settings>  <Database>   <DataSource>Oracleサーバー名</DataSource>   <UserId>ユーザー名</UserId>   <Password>パスワード</Password>  </Database>  <Path>   <Form>フォームが存在するフォルダパス</Form>   <Output>ファイルを出力するフォルダパス</Output>  </Path> </Settings> -------------------------------------------------- となっております。 お客様の環境で実行したら、このプログラムのxmlDoc.load(FileName)の箇所でエラーが出ました。 読み取るXMLファイル内の漢字を除いたら実行できたみたいなのですが、 開発環境ではXMLファイルに漢字を含んでいても問題なくload出来るのです。 端末に依存するのでしょうか? それともこの文字があったらダメというのがあるのでしょうか? 何か情報があればご教示願います。 よろしくお願い致します。

  • C# GetElementsByTagNameで取得したリストの大きさ

    C#を使用しています。  GetElementsByTagName命令で取得したリストの大きさを取得する方法、命令を教えてください。 // XmlDocumentオブジェクトを作成 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("ファイル.xml"); // page要素のリストを取得 XmlNodeList namelist = xmlDoc.GetElementsByTagName("名前");

    • ベストアンサー
    • XML
  • XMLデータをパーサーをかけてテキストデータにするには?

    VB2005の初心者です。 XMLファイルを読み込んで、パーサーをかけてテキストデータにしたいのですが、やり方が分りません。 (パーサーを使わずにテキストデータにすることはできます。) ご存知の方は、ヒントでも良いので教えていただきたいです。 仕事で行き詰っているため、たくさんの方の情報をいただけると幸いです。 下記は、パーサーを使わないやり方です。 Dim xmlDoc As XmlDocument = New XmlDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") strText = xmldoc.OuterXml パーサーを使う場合、下記のようになると思うのですが、 どのようにテキストデータにすれば良いのか分りません。 (OuterXmlが使えません。) Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") よろしくお願い致します。

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • 至急お願いします。vbaでxmlファイルを読み込み

    【Excel マクロ】xmlファイルを読み込み、一覧形式で出力ファイルを作成したいです。有識者の方、ご教示いただけますと幸いです。 ◆やりたいこと①:指定したフォルダ内(C:/属性一覧)にxmlファイルが複数格納されています。(例:文書①.xml、文書②.xml…) このxmlファイルを読み込みたいです。 ◆やりたいこと②:①で読み込んだxmlファイルのデータの中身は下記のとおりです。 こちらから、"Path"と"Property Display"を出力するファイルを作成したいです。 下記にxmlファイルの中身を記載します。 <PropertiesInfo> <Documrent ="123456---------"> <DocumentKind = "abcde-----------" Path = "/階層1/階層2/階層3"> <FolderName = "\^-)('&%$#"-----------------------------------------------"> <System> <Property Display = "文書名" Value = "〇〇〇" ListPath = "---------------------------" > <Property Display = "作成日時" Value = "2021/12/31" ListPath = "---------------------------"> <Property Display = "作成者" Value = "▲▲" ListPath = "---------------------------"> <Property Display = "更新日時" Value = "2022/2/1" ListPath = "---------------------------"> <Property Display = ............ <Property Display = ........... ・ ・ ・ ・ ・ ◆やりたいこと③:②で取得したPathとProperty Displayを、出力ファイルの中に記載したいです。セルの区切りを「-」で表してみます。 1行目(ヘッダ):Path-文書名-作成日時-作成者-更新日時…… 2行目(文書①のデータ): 〇〇〇-2021/12/31-▲▲-2022/2/1… 3行目(文書②のデータ): …………… 4行目(文書③のデータ): …………… としたいです。 どうか有識者の方々、よろしくお願いいたします。

  • XMLのparseエラーについて

    JavaのURLでWASにあるXMLファイルにアクセスし、その内容をcom.sun.xml.tree.XmlDocumentクラスのインすタンスを生成したいと思っています。 ソース抜粋 PrintWriter out = new PrintWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8")); out.print(xmlDoc.writeString()); out.flush(); out.close(); con.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String inputLine = null; while ((inputLine = in.readLine()) != null) { answer.append(inputLine); } new XmlDocument(is, false); 上記のnew XmlDocument(is, false);を実行したら、例外で落ちてしまいます。 エラー内容は、org.xml.sax.SAXParseException: com.sun.xml.parser/P-019 XMLの書式が悪いと思いためしに、 new XmlDocument(is, false);を実行する前に、XMLファイルを作成し、ブラウザで表示したところ正常でした。 原因がわかりません、皆さんよろしくお願いします。

  • XML DOMについて

    JavaScriptでDOMを使用して、xmlhttp.sendで指定のPHPファイルに送信しましたが、 PHP側で値を取得できません。 (PHP Ver.5.3.0) 以下、JavaScript var UserID="abc"; var Password="abc"; var xmlDoc = new ActiveXObject("Microsoft.XMLDom"); xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml","version=\"1.0\"")); var root = xmlDoc.createElement("xDoc"); xmlDoc.documentElement=root; var node_Item = xmlDoc.createElement("Command"); root.appendChild(node_Item); var node_UserID = xmlDoc.createElement("UserID"); node_UserID.appendChild(xmlDoc.createTextNode(UserID)), node_Item.appendChild(node_UserID); var node_Password = xmlDoc.createElement("Password"); node_Password.appendChild(xmlDoc.createTextNode(MDString(Password))), node_Item.appendChild(node_Password); var node_Sufix = xmlDoc.createElement("Sufix"); node_Sufix.appendChild(xmlDoc.createTextNode(Sufix)), node_Item.appendChild(node_Sufix); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post",topURL("main/Log.php"),false); xmlhttp.send(xmlDoc); 以下、Log.php <?php session_start(); $DEBUG_MODE=false; $xmlLogQ=$_SERVER['DOCUMENT_ROOT']."/test/temp/Request.xml"; $xml = new DOMDocument(); $xml->async=false; if (!$DEBUG_MODE) { if ($XML_LOG) { $xml->save($xmlLogQ); } } else { if ($XML_LOG) { $xml->load($xmlLogQ); } } $doc=$xml->documentElement; if ($xml->parseError.errorCode==0) { $xml = $node=$doc->selectSingleNode("Command/UserID"); if (!($node==null)) { $UserID=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Sufix"); if (!($node==null)) { $Sufix=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Password"); if (!($node==null)) { $Password=$node->text; $node=null; } } ?> 保存したXML上、<?xml version="1.0"?>以降書き込みできてません。 どの部分がおかしいか不明の為、申し訳ないですがご教授お願いします。

    • ベストアンサー
    • PHP
  • c++でxpath指定でXML

    c++でプログラミングを学んでいます。 XMLを使って設定ファイルを作ろうと思っています。 プログラム側で、あらかじめどのようなフォーマットのXMLかは知っているので、 ルートからのxpathを文字列で指定して要素を読みに行きたいのですが、 どのライブラリがこれを出来るのかわからない(1)、 また、サンプルが見付からない(2)、 ので困っています。 (1)と(2)について教えてください。★ (1)については、XercesとXalanとlibxml2が出来そう?、 (2)については直接指定のサンプルを全くみつけられていない、というところです。 (ソースコードについてくるサンプルでも直接指定は見つけられていなくて、複雑だと読めなくて困ってます。) (出来そうだという書き込みは、日本語圏・英語圏でちらほら見られる。) 因みに、boost::property_treeで読もうと思ったりしましたが、属性を検索キーにする必要があって、xpathが利用できないと複雑なプログラムを書かないとならないので、やめました。 そこまでするならXMLのフォーマットを変えよう→XMLの意味が無い→何としてもxpath、と…。 よろしくお願いします。

  • XMLへDOMでタグの追加

    次のようなXMLにDOMで、タグを追加しようとしているのですが、 追加される場所が思った所に追加されません。 正常XMLにようにしたいのですが、どうすれば良いでしょうか? --元XML----------------- <root> <item>a</item> <item>b</item> </root> --結果XML----------------- <root> <item>a</item> <item>b</item> <info>xxxx</info> </root> --正常XML----------------- <root> <info>xxxx</info> <item>a</item> <item>b</item> </root> -- プログラム ---------------- MSXML::IXMLDOMDocumentPtr xmlDoc = NULL; MSXML::IXMLDOMNodeListPtr pNodes; MSXML::IXMLDOMNodePtr pNode; MSXML::IXMLDOMElementPtr pElem; xmlDoc.CreateInstance ("Msxml2.DOMDocument"); xmlDoc->load( ファイル名 ); pNodes = xmlDoc->selectNodes(L"/root"); pNode = pNodes->Getitem(0); pElem = xmlDoc->createElement(L"info"); pNode->appendChild( pElem ); 環境:WinXP+IE7+VC6

    • ベストアンサー
    • XML
  • PHP4でのXMLデータの取り扱い

    Webサービスを利用してXMLデータを取得するスクリプトをPHPで書いています。レンタルサーバの関係でバージョンは4.4.4しか使えません。 XMLを扱う関数というと、PHP5ではsimpleXMLやXMLReaderなどがあるようで、各要素へアクセスするにも $xml=simplexml_load_file('books.xml'); foreach($xml->book as $book){ .... という感じでオブジェクトとしてアクセスできるようですが、こういうのをPHP4で実現する方法はないのでしょうか?例えば入れ子になったデータだと、深い階層にたどりつくために foreach($results as $key => $value){ foreach($value $key2 => $value2){ foreach($value $key3 => $value3){ ... } } } みたいな感じで書いているのですが、まったくスマートではないですし、なにか間違っているような気がします。良い方法があればお教えください。よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう