Поиск XML в powershell с двоеточием - PullRequest
4 голосов
/ 22 августа 2011

У меня есть XML в формате:

<val:root>
   <bla>
     <value>1234</value>
</val:root>

Я могу сделать get-content файла в переменную $ xml, но у меня проблемы с "val: root".

Спасибо за любую помощь!

Edit:

Я пробовал $ xml. "Val: root", $ xml.val, $ xml.'val: root 'и $ xml. {Val: root}. Нашел решение в ответе Мизо:

$ XML. корень .value

Ответы [ 3 ]

5 голосов
/ 22 августа 2011

В вашем XML-файле отсутствует объявление для пространства имен val. Кроме того, элемент <bla> не определен.

  • Поместите объявление пространства имен в элемент * <root>:

    <val:root xmlns:val="urn:dummy">
    

    Тогда вы можете сделать

     PS C:\> $xml = [xml] (get-content test.xml)
     PS C:\Users\mizo\test> $xml.root.value
     1234
    
  • Если у вас нет контроля над данными XML, вы можете объявить пространство имен val в фиктивном корне в качестве обходного пути:

    $xml = [xml] ("<dummyroot xmlns:val='urn:dummy'>" +
                  (get-content test.xml) +
                  "</dummyroot>")
    

    Тогда вы можете получить доступ к элементам:

    PS C:\> $xml.dummyroot.root.value
    1234
    

Замените urn:dummy на соответствующий идентификатор, если хотите.

3 голосов
/ 22 августа 2011

Так что я собираюсь сделать удар по проблеме, даже без всей информации.На основании предоставленного вами образца XML ваш XML искажен.У вас есть как минимум два вопроса.Первый - это тег без соответствующего закрытого тега.Во-вторых, вы используете пространство имен, не объявляя его.Чтобы решить эту проблему, измените это:

<val:root>

На это:

<val:root xmlns:val="http://www.w3.org/TR/html4/">

Или используйте более подходящий URI, если хотите.

0 голосов
/ 23 августа 2011

Вам просто нужно определить пространство имен при загрузке файла XML.

http://huddledmasses.org/xpath-and-namespaces-in-powershell/

...