2015-09-05 156 views
0

我有基本的VB編程知識。我無法從XML文件獲取信息。我知道我可以簡單地將XML作爲普通文件打開,然後依次讀取,但我希望儘可能高效地運行我的代碼。如何讀取XML文件中的值?

我在讀一堆XML文件。 <full path>+<file name>將被傳遞給xml-reading子或函數。

這裏的XML是什麼樣子:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <mproxyMessage xmlns:ns2="com.cmp.mproxy.message" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:mproxyMessage"> 
    <version>2</version> 
    <receiver> 
     <uid>az.local</uid> 
    </receiver> 
    <sender> 
     <uid>test.sender</uid> 
    </sender> 
    <attachments> 
     <attachment> 
      <uri>C:\Inbox\2015-09-04\2cc403ace4984782bf5ae949e22a4d5b\VJ14699062340.ima</uri> 
     </attachment> 
    </attachments> 
    <option> 
     <map> 
      <element> 
       <key>OPTION_MEXI_OPTION</key> 
       <value>DSUBJECT(DMA-IMA)DGIVENNAME(9803375)DSENDERID(144796) medidoc_formatrecipient : Demo User, 14699062,Department,AZO(recipient DN : uid=demo.user,null)</value> 
      </element> 
      <element> 
       <key>DSENDERID</key> 
       <value>144796</value> 
      </element> 
      <element> 
       <key>DGIVENNAME</key> 
       <value>9803375</value> 
      </element> 
      <element> 
       <key>OPTION_MESSAGE_UID</key> 
       <value>2cc403ace4984782bf5ae949e22a4d5b</value> 
      </element> 
      <element> 
       <key>DSUBJECT</key> 
       <value>DMA-IMA</value> 
      </element> 
      <element> 
       <key>recipientDN</key> 
       <value>uid=demo.user</value> 
      </element> 
      <element> 
       <key>recipientLabel</key> 
       <value>Demo User, 14699062,Department,AZO</value> 
      </element> 
     </map> 
    </option> 
</mproxyMessage> 

我需要什麼樣的回報(作進一步處理)是<uri>標籤(文件路徑),在DSUBJECT值之間的值,recipientLabel(只數量,但是這很容易分裂)

的URI似乎使用是相當簡單:

Dim xml = XDocument.Load(file.FullName) 
MsgBox("URI: " + xml.<mproxyMessage>.<attachments>.<attachment>.<uri>.Value) 

但我被困與鍵/值部分

我一直在尋找一些代碼樣本要做到這一點,但沒有產生的結果,我希望......

是他們誰可以給我一個代碼示例?

回答

0

可以查詢使用LINQ(未測試的代碼)的鍵/值元素:

Dim dsubject = (
    From e In xml.<mproxyMessage>.<option>.<map>.<element> 
    Where e.<key>.Value = "DSUBJECT" 
    Select e.<value>.Value 
).Single() 

這看起來爲<element>與匹配<key>值,並選擇相關聯的<value>值。

+0

也是一樣! 「開箱即用」!只需要找出如何使這個錯誤證明(一些XML沒有dsubject標籤),但這是一個完美的起點) – user3926942

+0

你可以使用'SingleOrDefault()'來處理不匹配的情況。如果找不到匹配,它將返回「Nothing」。 – Mark

0

嘗試而不指定的根元素:

'to load 
    ' someXML = XElement.Load(PATH HERE) 

    Dim someXML As XElement = <mproxyMessage xmlns:ns2="com.cmp.mproxy.message" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:mproxyMessage"> 
            <version>2</version> 
            <receiver> 
             <uid>az.local</uid> 
            </receiver> 
            <sender> 
             <uid>test.sender</uid> 
            </sender> 
            <attachments> 
             <attachment> 
              <uri>C:\Inbox\2015-09-04\2cc403ace4984782bf5ae949e22a4d5b\VJ14699062340.ima</uri> 
             </attachment> 
            </attachments> 
            <option> 
             <map> 
              <element> 
               <key>OPTION_MEXI_OPTION</key> 
               <value>DSUBJECT(DMA-IMA)DGIVENNAME(9803375)DSENDERID(144796) medidoc_formatrecipient : Demo User, 14699062,Department,AZO(recipient DN : uid=demo.user,null)</value> 
              </element> 
              <element> 
               <key>DSENDERID</key> 
               <value>144796</value> 
              </element> 
             </map> 
            </option> 
           </mproxyMessage> 

    Dim s As String = someXML.<attachments>.<attachment>.<uri>.Value 
+0

我認爲你沒有得到我的問題:) ..獲取值是沒有問題的。它獲得與DSUBJECT鍵相對應的值,並且對於收件人標籤鍵 – user3926942