0

I have a question, I want to fetch an attribute from one XML and use the same fetched value for another XML. Sounds pretty easy but there is one thing I need to get around. My first XML looks like this here:

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
<streams>
    <stream index="0" codec_name="prores" codec_long_name="ProRes" codec_type="video" codec_time_base="1/24" codec_tag_string="apcs" codec_tag="0x73637061" width="1920" height="1080" has_b_frames="0" sample_aspect_ratio="0:1" display_aspect_ratio="0:1" pix_fmt="yuv422p10le" level="-99" r_frame_rate="24/1" avg_frame_rate="24/1" time_base="1/24" start_pts="0" start_time="0.000000" duration_ts="1152" duration="48.000000" bit_rate="13174677" nb_frames="1152" nb_read_frames="1152">
        <disposition default="1" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0"/>
        <tag key="creation_time" value="2013-10-10 02:59:14"/>
        <tag key="language" value="eng"/>
        <tag key="handler_name" value="DataHandler"/>
    </stream>
</streams>
</ffprobe>

There I grab the nb_frames attribut and save it in a parameter called $totalframes :

$xmlpfad = [xml](Get-Content C:\Users\Administrator\Desktop\input_dcp\$filename+totalframes.xml)
        [string]$totalframes = $xmlpfad.ffprobe.streams.stream | select nb_frames

Now when I try to use this value for my second XML I get something like:

<NumOfRepetitions>@{nb_frames=1152}</NumOfRepetitions>

But I only need the value 1152 itself, without @{nb_frames=} is this possible in some kind of way?

1 Answer 1

1

Your totalframes variable will be an object which has a property called nb_frames.

In order to get only the value of the property, you need to use the -ExpandProperty parameter to the Select cmdlet. So change the last line to:

[string]$totalframes = $xmlpfad.ffprobe.streams.stream | select -ExpandProperty nb_frames
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you very much that did the trick for me, what I tried was $totalframes = $totalframes.TrimStart("@{nb_frames=") and $totalframes = $totalframes.TrimEnd("}") but I think your method is the easier and better way.
You could also do [string]$totalframes = ($xmlpfad.ffprobe.streams.stream | select nb_frames).nb_frames, but I would probably go for the -ExpandProperty solution.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.