我目前正在尝试将一些 XML 文档输入脚本并将它们初始化为[PSCustomObject]
. XML 文档需要分成几个对象,然后添加到一起。
这是我的脚本:
[xml]$CourseStructureIn = Get-Content .\Sample.xml
$data = foreach ($Instances in $CourseStructureIn.Node.instances.courseInstance) {
$instancearray = foreach ($instance in $instances) {
$hash = [ordered]@{ CourseInstanceID = $instance.courseInstanceID}
[PSCustomObject]@{
CourseCode = $instance.CourseCode
InstanceCode = $instance.instanceCode
session = $instance.session
quota = $instance.quota
}
}
$hash.Add("Instances", $instancearray)
$modules = $instance.L1Modules.L1Module
$modulearray = foreach ($module in $modules) {
[PSCustomObject]@{
moduleCode = $module.moduleCode
moduleTypeCode = $module.moduleTypeCode
moduleInstanceID = $module.moduleInstanceID
semester = $module.semester
credits = $module.credits
overallGradeWeighting = $module.overallGradeWeighting
fees = $module.fees
documents = $module.documents
}
}
$hash.Add("Modules", $modulearray)
$roles = $instance.L1Modules.L1Module.roles.role
$rolearray = foreach ($role in $roles) {
[PSCustomObject]@{
rolesGUID = $role.GUID
rolesIDNumber = $role.idnumber
roleFirstName = $role.firstname
roleSurname = $role.surname
}
}
$hash.Add("Roles", $rolearray)
这将 XML 结构正确地导入到对象数组的 2 个不同实例中——我应该提到 XML 最初来自规范化数据库,因此每个 XML 文档或多或少代表一个表——最终成为 PowerShell 中的多维数组。
$data.GetType() IsPublic IsSerial 名称 BaseType -------- -------- ---- -------- 真真对象[] System.Array
我可以参考各个数组对象
$data[0].角色 | 英尺 角色GUID 角色IDNumber 角色名字角色姓氏 --------- ------------- ------------- ----------- 55001420 55001420 RM 55001414 55001414 SC 55001234 55001234 CH 55001342 55001342 超频 55001414 55001414 SC 55001342 55001342 超频 55001445 55001445 毫米 55001422 55001422 啊 55001001 55001001 下午 55001079 55001079 对 55000770 55000770 上午 55000906 55000906 MB
我希望能够ConverTo-Html
制作报告 - 但我不知道如何枚举这种类型的结构 - 我应该留下一个具有一对多关系的表(这是多维数组还是锯齿状数组?)可以有人给我一些关于如何输出这些类型的结构的指示吗?当输出是某种类型的矩阵时,遍历数组或对象很好 - 但是当结构对于某些列是多行而对于其他列是单行时,我们应该使用什么。
例如我的输出Format-Table
:
$数据 | 英尺 CourseInstanceID 实例模块 ---- --------- -------- PGDDA_353650876 @{课程代码=PGDDA; 实例代码=PGDSP;会话=2014;配额=999;实例=; CourseInstanceID=PGDDA_353650876; 模块=System.Object[]; 角色=System.Object[]} {@{moduleCode=H... PGDDA_418403503 @{课程代码=PGDDA; 实例代码=PGDSP;会话=2015;配额=999;实例=; CourseInstanceID=PGDDA_418403503; 模块=System.Object[]; 角色=System.Object[]} {@{moduleCode=H...
我已经尝试扩展属性并且已经在整个网络上阅读,所以任何指针将不胜感激。
以下是成员:
$数据 | 通用汽车 类型名称:System.Management.Automation.PSCustomObject 名称 MemberType 定义 ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode 方法 int GetHashCode() GetType 方法类型 GetType() ToString 方法字符串 ToString() CourseInstanceID NoteProperty string CourseInstanceID=PGDDA_353650876 实例 NoteProperty Selected.System.Management.Automation.PSCustomObject Instances=@{CourseCode=PGDDA; 实例代码=PGDSP;会话=2014;配额=999;实例=; CourseInstanceID=PGDD... 模块 NoteProperty Object[] Modules=System.Object[] 角色 NoteProperty Object[] Roles=System.Object[]
谢谢 - 我不能在这里分享 XML 文档,但我会从我的具体示例转移到一般示例。
假设我们有许多以下 XML 文档
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<author>Tiny Tim</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>$44.95</price>
<price>€40.50</price>
<price>£35.99</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
<TableOfContents>
<chapter Title = "Introduction" Number = "1" Page = "1"></chapter>
<chapter Title = "XSD" Number = "2" Page = "14"></chapter>
<chapter Title = "XPATH" Number = "3" Page = "27"></chapter>
<chapter Title = "XQUERY" Number = "4" Page = "42"></chapter>
<chapter Title = "XHTML" Number = "5" Page = "58"></chapter>
<chapter Title = "XSLT" Number = "6" Page = "75"></chapter>
</TableOfContents>
</book>
</catalog>
我想把它转换成这种格式的表格(图片抱歉)
我还应该提到,一个文档中可能有很多书节点,所以我想要每本书都有一个表格。