select-xml не возвращает никаких результатов - PullRequest
2 голосов
/ 09 декабря 2010

Я пытаюсь использовать команду powershell select-xml для выбора данных из файла xml.Когда я запускаю команду, приведенную ниже, результаты или ошибки не возвращаются.Я ожидаю, что список изданий будет возвращен на экран.Что с этим не так?

PS C:\> select-xml -path "C:\t.xml" -xpath "//edition" | foreach {$_.node.InnerXML}
PS C:\>

Файл XML (C: \ t.xml):

 <?xml version="1.0" encoding="utf-8"?>
  <Book>
    <projects>
      <project name="Book1" date="2009-01-20">
        <editions>
           <edition language="English">En.Book1.com</edition>
           <edition language="German">Ge.Book1.Com</edition>
           <edition language="French">Fr.Book1.com</edition>
           <edition language="Polish">Pl.Book1.com</edition>
        </editions>
      </project>
    </projects>
  </Book>

Ответы [ 4 ]

3 голосов
/ 09 декабря 2010

ОК, так что я знаю, что не так. Перед первым узлом декларации XML был один пробел. Действительно раздражает. Я попробовал вашу первую строку:

PS H:\> $xml = ([xml](Get-Content -Path C:\scripts\t.xml)).Book.Projects.Project

Ошибка с:

".. Декларация XML должна быть первый узел в документе, и нет пробелы разрешены предстань перед ним ... "

Я уверен, что select-xml должен потерпеть неудачу в вопросе с этой же ошибкой при попытке прочитать XML-файл. XML-файл отлично отображается в IE.

3 голосов
/ 09 декабря 2010

Просто еще один способ сделать это:

PS H:\> $xml = ([xml](Get-Content -Path C:\scripts\t.xml)).Book.Projects.Project
PS H:\> $xml.editions | select -ExpandProperty Edition

language                                                    #text
--------                                                    -----
English                                                     En.Book1.com
German                                                      Ge.Book1.Com
French                                                      Fr.Book1.com
Polish                                                      Pl.Book1.com
1 голос
/ 10 декабря 2010

Вот еще несколько вариантов:

$xml = [xml]@'
<?xml version="1.0" encoding="utf-8"?>   
<Book>
  <projects>
    <project name="Book1" date="2009-01-20">
      <editions>
        <edition language="English">En.Book1.com</edition>
        <edition language="German">Ge.Book1.Com</edition>
        <edition language="French">Fr.Book1.com</edition>            
        <edition language="Polish">Pl.Book1.com</edition>         
      </editions>       
    </project>     
  </projects>   
</Book> 
'@

$xml | Select-Xml '//edition/text()' | Foreach {"$_"}

$xml | Select-Xml '//edition' |  Foreach {$_.Node.InnerText}
1 голос
/ 09 декабря 2010

$ _. Узел возвращает System.Xml.XmlElement, у которого нет свойства innerXml

Select-Xml -Path C:\t.xml -XPath "//edition" | 
    % {$_.node} | get-member | out-gridview
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...