Ryan Kirkpatrick
Ryan Kirkpatrick

Reputation: 23

Parsing an XML with Powershell

I need to read through this xml file and count how many Representation elements there are in the first AdaptationSet, because everytime this xml is generated it can have varying amounts from 1 up to 10. I'm new to powershell and was previously using xdoc to read an xml file.

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="111091661:1853125475:Ntsc" profiles="urn:mpeg:dash:profile:isoff-live:2011 urn:com:dashif:dash264" type="dynamic" availabilityStartTime="2015-07-09T18:47:42.8780481" publishTime="2015-07-09T18:47:41.7236461" minimumUpdatePeriod="PT3600S" minBufferTime="PT15S" timeShiftBufferDepth="PT60S" suggestedPresentationDelay="PT30S" maxSegmentDuration="PT1.000S" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011">
  <Period id="1" start="PT0S">
    <AdaptationSet frameRate="30000/1001" mimeType="video/mp4" codecs="avc1.4D401E" startWithSAP="1" segmentAlignment="true">
      <SegmentTemplate timescale="30000" duration="30030" startNumber="0" media="$Bandwidth$/$Number$.m4v" initialization="$Bandwidth$/0.m4s" />
      <Representation width="314" height="210" id="v0" bandwidth="300000" />
      <Representation width="614" height="414" id="v1" bandwidth="1150000" />
      <Representation width="720" height="486" id="v2" bandwidth="2000000" />
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.2" startWithSAP="1" segmentAlignment="true">
      <SegmentTemplate timescale="48000" duration="48048" startNumber="0" media="audio/$Number$.m4a" initialization="audio/0.m4s" />
      <Representation id="a0" bandwidth="448000" />
    </AdaptationSet>
  </Period>
</MPD>

Upvotes: 0

Views: 308

Answers (2)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174435

You could also do:

$Count = ([xml](Get-Content .\Test.xml)).MPD.Period.FirstChild.Representation.Count

Upvotes: 1

user4003407
user4003407

Reputation: 22102

You can use Select-Xml to select nodes by XPath expression:

(
    Select-Xml -Namespace @{ns='urn:mpeg:dash:schema:mpd:2011'} `
               -XPath //ns:AdaptationSet[1]/ns:Representation `
               -Path Test.xml |
    Measure-Object
).Count

Upvotes: 2

Related Questions