Xml Powershell获取值并创建表
我使用此xml文件来获取一些过滤数据:Xml Powershell获取值并创建表,xml,powershell,Xml,Powershell,我使用此xml文件来获取一些过滤数据: 洛斯尤戈斯 埃尔阿尔特 我需要获取TIME_值,其中TIME_SLOT TIME_SLOT ID等于TIME_SLOT_REF1和TIME_SLOT_REF2(按注释值排序) 这是一个按主题划分的视频时长 例如: ANNOTATION_VALUE "los juegos" is the video topic TIME_SLOT_REF1="ts1" is the video start time
洛斯尤戈斯
埃尔阿尔特
我需要获取TIME_值,其中TIME_SLOT TIME_SLOT ID等于TIME_SLOT_REF1和TIME_SLOT_REF2(按注释值排序)
这是一个按主题划分的视频时长
例如:
ANNOTATION_VALUE "los juegos" is the video topic
TIME_SLOT_REF1="ts1" is the video start time
TIME_SLOT_REF2="ts2" is the video end time
我需要获取time\u SLOT time\u SLOT ID=“ts1”time\u VALUE=“3060”和time\u SLOT time\u SLOT ID=“ts2”time\u VALUE=“81090”
最后,我需要一个包含以下内容的表:
Start_Time End_Time Topic
3060 81090 los juegos
我如何解决这个问题
我尝试使用以下代码:
Get-ChildItem C:\Scripts\Video_Time\Input *.eaf | ForEach-Object {
[xml] $xml =Get-Content $_.FullName
foreach($Annotation in $xml.ANNOTATION_DOCUMENT.TIER.ANNOTATION) {
[pscustomobject]@{
Start = $xml.ANNOTATION_DOCUMENT.TIME_ORDER.TIME_SLOT.TIME_SLOT_ID = ($_.ALIGNABLE_ANNOTATION.TIME_SLOT_REF1).TIME_VALUE
End = $xml.ANNOTATION_DOCUMENT.TIME_ORDER.TIME_SLOT.TIME_SLOT_ID = ($_.ALIGNABLE_ANNOTATION.TIME_SLOT_REF2).TIME_VALUE
Title = $_.ALIGNABLE_ANNOTATION.ANNOTATION_VALUE
}}}
感谢您的帮助。枚举所有
注释
节点,然后使用TS引用在时间顺序
节点中查询适当的值:
$xml = [xml]@'
<?xml version="1.0" encoding="UTF-8"?>
<ANNOTATION_DOCUMENT>
<TIME_ORDER>
<TIME_SLOT TIME_SLOT_ID="ts1" TIME_VALUE="3060"/>
<TIME_SLOT TIME_SLOT_ID="ts2" TIME_VALUE="81090"/>
<TIME_SLOT TIME_SLOT_ID="ts3" TIME_VALUE="81114"/>
<TIME_SLOT TIME_SLOT_ID="ts4" TIME_VALUE="104639"/>
</TIME_ORDER>
<ANNOTATION>
<ALIGNABLE_ANNOTATION ANNOTATION_ID="a1" TIME_SLOT_REF1="ts1" TIME_SLOT_REF2="ts2">
<ANNOTATION_VALUE>los juegos</ANNOTATION_VALUE>
</ALIGNABLE_ANNOTATION>
</ANNOTATION>
<ANNOTATION>
<ALIGNABLE_ANNOTATION ANNOTATION_ID="a2" TIME_SLOT_REF1="ts3" TIME_SLOT_REF2="ts4">
<ANNOTATION_VALUE>el arte</ANNOTATION_VALUE>
</ALIGNABLE_ANNOTATION>
</ANNOTATION>
</ANNOTATION_DOCUMENT>
'@
foreach($Annotation in $xml.SelectNodes('/ANNOTATION_DOCUMENT/ANNOTATION')) {
[pscustomobject]@{
Start = $xml.SelectSingleNode("//TIME_ORDER/TIME_SLOT[@TIME_SLOT_ID = '$($Annotation.ALIGNABLE_ANNOTATION.TIME_SLOT_REF1)']").TIME_VALUE
End = $xml.SelectSingleNode("//TIME_ORDER/TIME_SLOT[@TIME_SLOT_ID = '$($Annotation.ALIGNABLE_ANNOTATION.TIME_SLOT_REF2)']").TIME_VALUE
Title = $Annotation.ALIGNABLE_ANNOTATION.ANNOTATION_VALUE
}
}
XML示例无效(有一个
结束标记,但没有相应的
标记)。谢谢@MathiasR.Jessen,你说得对,我的错。你希望输出表包含所有电影的开始/结束,还是只包含一部特定电影(按标题/注释值)?所有电影,如随机值,这只是一个原始xml文件。再次感谢。但是使用Xpath我没有得到任何reults,@Mathias R.JessenI已经用你的代码编辑了我的答案adapted@Paulo已更新,请重试-我以前忘记将$\uucode>更改为$注释
Start End Title
----- --- -----
3060 81090 los juegos
81114 104639 el arte