XMLStarlet提取多行

时间:2016-06-21 17:55:29

标签: xml xmlstarlet

我有这个相当复杂的XML文件,其中包含URL信息。这些URL是从几个XML字段构建的,我无法提取这些字段来汇总这些字段。

XML看起来像这样,我需要提取所有字段(为了便于阅读,我加粗了它)我完全失去了能够提取所有这些字段。我安装了XMLStarlet,过去我曾经使用过几次,但这已经超出了我的想象。任何建议或帮助将不胜感激。

 <DynamicUrl>
  <Name>DynamicUrl</Name>
  <CacheData>true</CacheData>
  <Path>http://contentstore.fourwindsinteractive.com/PlayerHandler.ashx</Path>
  <Query>
    <DynamicUrlNameValuePair>
      <Name>Type</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>download</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>Title</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>CS00090256</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>UserType</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>1</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>LinkSource</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>X3/1QlyNrhGynsh+0oRn7Q==</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>LinkKey</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>1c44ad692f10fc96922282d9bf6eb57c</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>Extension</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>mp4</Text>
      </Value>
    </DynamicUrlNameValuePair>
    <DynamicUrlNameValuePair>
      <Name>FWIIncludeMimetype</Name>
      <Value xsi:type="DynamicUrlLiteral">
        <Text>false</Text>
      </Value>
    </DynamicUrlNameValuePair>
  </Query>
  <UseUploadData>false</UseUploadData>
  <Method>Get</Method>
  <Username />
  <Password />
  <Domain />
  <ConnectionString />
  <CommandText />
  <DeploymentBehavior>DownloadSource</DeploymentBehavior>
</DynamicUrl>

1 个答案:

答案 0 :(得分:1)

xmlstarlet sel -t -m 'DynamicUrl/Query/DynamicUrlNameValuePair/Value/Text' -v . -o '/' file.xml

你确定这是你的问题吗?

也许您的问题是xsi:type="DynamicUrlLiteral"

我把它们剥掉了,
也许你在你提供的xml片段之外定义了命名空间 如果你不这样做,你需要定义你的xsi:type在文件中的内容,或者至少在命令行上使用-N foo=xsi:type

告诉xmlstarlet