Доступ к паре ключ-значение в XML напрямую - PullRequest
3 голосов
/ 13 февраля 2012

Учитывая этот пример XML-данных, возможно ли получить прямой доступ к ключу?

, например: $ xml.root.User_Blob.LogonMethod

<?xml version="1.0" encoding="utf-16"?>
<root>
  <User_Blob>
    <Item>
      <Key>LogonMethod</Key>
      <Value>prompt</Value>
    </Item>
    <Item>
      <Key>ServerURLEntered</Key>
      <Value>http://myserver/config.xml</Value>
    </Item>
    <Item>
      <Key>ServerURLListUsers</Key>
      <Value>
        <LSOption>http://myurl/config.xml</LSOption>
        <LSOption>http://myurl</LSOption>
      </Value>
    </Item>
    <Item>
      <Key>UserDisplayDimensions</Key>
      <Value>fullscreen</Value>
    </Item>
  </User_Blob>

Ответы [ 3 ]

5 голосов
/ 13 февраля 2012

Лично я в случаях, когда Where-Object нужен, я бы использовал Select-Xml:

$c = [xml]'<?xml version="1.0" encoding="utf-16"?>
<root>
  <User_Blob>
    <Item>
      <Key>LogonMethod</Key>
      <Value>prompt</Value>
    </Item>
    <Item>
      <Key>ServerURLEntered</Key>
      <Value>http://myserver/config.xml</Value>
    </Item>
    <Item>
      <Key>ServerURLListUsers</Key>
      <Value>
        <LSOption>http://myurl/config.xml</LSOption>
        <LSOption>http://myurl</LSOption>
      </Value>
    </Item>
    <Item>
      <Key>UserDisplayDimensions</Key>
      <Value>fullscreen</Value>
    </Item>
  </User_Blob></root>'
($c | Select-Xml -XPath "//Item[Key = 'LogonMethod']").Node.Value

Это намного чище (если вы знаете, что делаете).

4 голосов
/ 13 февраля 2012

Попробуйте: -

[xml]$xmlObject = (New-Object System.Net.WebClient).DownloadString("Filepath")   

Write-Host $xmlObject.root.User_Blob.Item.Key

ИЛИ

$xmlObject = New-Object XML
$xmlObject.Load("YourFilePath")
$xmlObject.root.User_Blob.Item.Key

Чтобы получить значение для LogonMethod , попробуйте так: -

($xmlObject.root.User_Blob.Item | Where-Object { $_.Key -eq 'LogonMethod' }).Value

ИЛИ

Иначе: -

$xmlObject.selectSingleNode("/root/User_Blob/Item[Key = 'LogonMethod']/Value").get_innerXml()
1 голос
/ 13 февраля 2012

Вы также можете использовать метод SelectSingleNode:

$xml.SelectSingleNode("//*[Key='LogonMethod']").Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...