Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Powershell获取值并创建表_Xml_Powershell - Fatal编程技术网

Xml Powershell获取值并创建表

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

我使用此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_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