Member 9398890 Ответов: 3

Powershell XML Node-Name with "-"


Привет,

как я могу читать и автоматизировать обработку XML-узлов с "-" в имени с помощью PowerShell.


Я нашел это в справке для select-xml:

<?xml version="1.0" encoding="utf-8"?>
 <Book>
   <projects>
     <project name="Book1" date="2009-01-20">
       <book-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>
       </book-editions>
     </project>
   </projects>
 </Book>


и добавил "книгу -" в узлы, потому что у меня есть "-" в моем реальном xml.

в справке говорится, что если бы я выполнил эту команду

$xml / select-xml-xpath "/ / издание"

Я должен получить этот вывод

Text            Node          Path
----            ----          ----
En.Book1.com    edition       InputStream
Ge.Book1.Com    edition       InputStream
Fr.Book1.com    edition       InputStream
Pl.Book1.com    edition       InputStream


но я просто получаю это

Node                                    Path                                    Pattern
----                                    ----                                    -------
edition                                 InputStream                             //edition
edition                                 InputStream                             //edition
edition                                 InputStream                             //edition
edition                                 InputStream                             //edition


Так что я не знаю, есть ли проблема в " -". Реальный вопрос должен быть таким: как я могу найти конкретный узел ("издание") и отобразить/получить его содержимое?

Спасибо за ваши ответы.

Алекс

Andreas Gieriet

Что вы пробовали и где потерпели неудачу?
Овации
Энди
PS: пожалуйста, предоставьте сценарий, который вызывает проблемы, и некоторые примеры данных, а также то, что вы точно подразумеваете под "автоматизированной обработкой". Или вы ожидаете, что мы все это придумаем?

3 Ответов

Рейтинг:
2

Member 13351143

нижеследующее принесет вам результаты

проект " книжные издания"


Kats2512

вы думаете, что через 5 лет этот парень все еще будет искать ответ???

Member 13351143

ЛОЛ..

Рейтинг:
1

Zoltán Zörgő

Я полагаю, вам не нужен путь и имя узла. Таким образом, вы можете использовать один из них, предположив, что $books содержит xml:

$books | select-xml -xpath "//edition" | % {$_.Node."#text"}

$books.SelectNodes("//edition") | % { $_."#text"}

$books.book.projects.project."book-editions".edition | % {$_."#text"}

В более позднем примере вы можете увидеть, как можно ссылаться на имя элемента, содержащего дефис.


Рейтинг:
0

gjdfklfgdgfdgfdgfd

Аналогично решению Золтана, но отображает все три столбца с заголовками, как это требуется:


$xml = @"
<?xml version="1.0" encoding="utf-8"?>
 <Book>
   <projects>
     <project name="Book1" date="2009-01-20">
       <book-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>
       </book-editions>
     </project>
   </projects>
 </Book>
"@

$xml | select-xml -xpath "//edition" | select-object @{n='Text' ; e={$_.Node."#text"}}, Node, Path