Linux 如何在Powershell REPL控制台中打印xml元素及其属性的列表?

Linux 如何在Powershell REPL控制台中打印xml元素及其属性的列表?,linux,xml,powershell,xpath,read-eval-print-loop,Linux,Xml,Powershell,Xpath,Read Eval Print Loop,参考: 以及: 如何打印元素及其属性的列表 PS /home/nicholas/powershell> PS /home/nicholas/powershell> $doc = new-object System.Xml.XmlDocument PS /home/nicholas/powershell> $file = resolve-path('./bookstore.xml') PS /home/nicholas/powershell> $doc.load($

参考:

以及:

如何打印元素及其属性的列表

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc = new-object System.Xml.XmlDocument
PS /home/nicholas/powershell> $file = resolve-path('./bookstore.xml') 
PS /home/nicholas/powershell> $doc.load($file)                                           
PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc.bookstore.book[1].author.first-name
ParserError: 
Line |
   1 |  $doc.bookstore.book[1].author.first-name
     |                                     ~~~~~
     | Unexpected token '-name' in expression or statement.

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc.bookstore.book[1].author           

first-name last-name
---------- ---------
Margaret   Atwood

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc.bookstore

bk          book
--          ----
urn:samples {book, book, book, book}

PS /home/nicholas/powershell> 

只是没有使用
书籍

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc.bookstore.book

genre           : novel
publicationdate : 1997
ISBN            : 1-861001-57-8
title           : Pride And Prejudice
author          : author
price           : 24.95

genre           : novel
publicationdate : 1992
ISBN            : 1-861002-30-1
title           : The Handmaid's Tale
author          : author
price           : 29.95

genre           : novel
publicationdate : 1991
ISBN            : 1-861001-57-6
title           : Emma
author          : author
price           : 19.95

genre           : novel
publicationdate : 1982
ISBN            : 1-861001-45-3
title           : Sense and Sensibility
author          : author
price           : 19.95


PS /home/nicholas/powershell> 

哎哟。

只是没有使用
书籍

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> $doc.bookstore.book

genre           : novel
publicationdate : 1997
ISBN            : 1-861001-57-8
title           : Pride And Prejudice
author          : author
price           : 24.95

genre           : novel
publicationdate : 1992
ISBN            : 1-861002-30-1
title           : The Handmaid's Tale
author          : author
price           : 29.95

genre           : novel
publicationdate : 1991
ISBN            : 1-861001-57-6
title           : Emma
author          : author
price           : 19.95

genre           : novel
publicationdate : 1982
ISBN            : 1-861001-45-3
title           : Sense and Sensibility
author          : author
price           : 19.95


PS /home/nicholas/powershell> 
哎呀。

要解决问题中出现的语法错误

#breaked:'first name'不加引号就不能使用
$doc.bookstore.book[1]。author.first-name
#好:
$doc.bookstore.book[1]。作者。'first-name'
在PowerShell中作为属性名出现的元素名
first name
,不能在没有引号的情况下使用,因为
-
随后被解释为减法运算符,从而导致您看到的错误

简言之:

  • 只有字母、数字和
    (下划线)可以在不带引号的属性名称中使用;未加引号的变量名同上。[1]

  • 如有疑问,请引用


[1]PowerShell中标识符名称的确切规则

更准确地说,PowerShell允许标识符不带引号,如果它仅由以下Unicode类别之一的字符组成(在.NET中定义为枚举;括号中列出的字符可与正则表达式中的
\p{}
一起使用):

  • Lu

  • Ll

  • Lt

  • Lm

  • Lo

  • Nd
    )-第一个字符除外(变量名没有此限制)

  • (“低条”,更典型的是:“下划线”,唯一允许的符号)

标识符类型:

  • 属性名称
    .foo
  • 哈希表文本中的键(
    @{foo=…}
  • 变量名
    $foo

标识符确实支持附加字符,但需要附加语法

不符合上述规则的标识符必须:

  • 属性名和哈希表键:带引号(
    'last-name'
    last-name'
  • 变量名:包含在
    {…}
    中(
    ${last name}

请注意,扩展规则适用于命令名(函数、cmdlet、脚本或可执行文件的名称及其别名)和模块名

  • 除上述内容外,允许以下内容无需报价:
    • (“连字符”、“减号”,松散地称为“破折号”)
    • (“句号”、“句号”)
    • 文件路径中也有:)和)
在命令名中,除了函数名和cmdlet名(您甚至不能用其他字符定义)之外,只要在调用时引用命令名,就可以在名称中使用其他字符

然而,这样做是不明智的,因为用户通常希望命令不需要这样的引用;使用一个精心设计的示例:
Set别名“a&b”Get Date;&'a&b'
在技术上是可行的,但是调用的笨拙(引用,然后需要
&
)使得这是一个糟糕的选择。

要解决问题中显示的语法错误

#breaked:'first name'不加引号就不能使用
$doc.bookstore.book[1]。author.first-name
#好:
$doc.bookstore.book[1]。作者。'first-name'
在PowerShell中作为属性名出现的元素名
first name
,不能在没有引号的情况下使用,因为
-
随后被解释为减法运算符,从而导致您看到的错误

简言之:

  • 只有字母、数字和
    (下划线)可以在不带引号的属性名称中使用;未加引号的变量名同上。[1]

  • 如有疑问,请引用


[1]PowerShell中标识符名称的确切规则

更准确地说,PowerShell允许标识符不带引号,如果它仅由以下Unicode类别之一的字符组成(在.NET中定义为枚举;括号中列出的字符可与正则表达式中的
\p{}
一起使用):

  • Lu

  • Ll

  • Lt

  • Lm

  • Lo

  • Nd
    )-第一个字符除外(变量名没有此限制)

  • (“低条”,更典型的是:“下划线”,唯一允许的符号)

标识符类型:

  • 属性名称
    .foo
  • 哈希表文本中的键(
    @{foo=…}
  • 变量名
    $foo

标识符确实支持附加字符,但需要附加语法

不符合上述规则的标识符必须:

  • 属性名和哈希表键:带引号(
    'last-name'
    last-name'
  • 变量名:包含在
    {…}
    中(
    ${last name}

请注意,扩展规则适用于命令名(函数、cmdlet、脚本或可执行文件的名称及其别名)和模块名

  • 除上述内容外,允许以下内容无需报价:
    • (“连字符”、“减号”,松散地称为“破折号”)
    • (“句号”、“句号”)
    • 文件路径中也有:)和)
在命令名中,除了函数名和cmdlet名(您甚至不能用其他字符定义)之外,您可以获得awa
$xmldoc.bookstore.book | Format-Xml