需要通过XSL查看XML元素是否存在

时间:2015-07-30 19:26:41

标签: xml xslt

我正在使用XML并尝试将其转换为另一个软件程序。 XML是通过Web服务获得的,不幸的是它没有很好的形成(因为你可以看到它甚至没有提供XML版本)。这是程序的Web服务生成的XML:

Back

基本上,它是一堆不同的元素。但是,如果没有提供数据(由生成xml的原始数据库),则会出现挑战,因此不会有任何元素。例如,如果视频ID中没有条目,则不会有视频ID元素。

我的问题是:我有没有办法1)看看元素是否存在使用xsl和2)获取相应的值?

我已经尝试过了,我似乎无法让它发挥作用:

<Metadata>
      <Entry Group="SYSTEM">
        <Tag>MOB ID</Tag>
        <Value>060a2b340101010101010f0013-000000-55b9344b27dd00a6-    060e2b347f7f-2a80</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Moniker</Tag>
        <Value>1|F9E3A1A4-4CB9-45CC-A590-77A5D733B633|*|3055376|*</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>CFPS</Tag>
        <Value>29.97</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Created By</Tag>
        <Value>rjensen</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Creation Date</Tag>
        <Value>2015-07-29T16:15:07.000-0400</Value>
      </Entry>
      <Entry Group="USER">
        <Tag>Display Name</Tag>
        <Value>LTW_NatLocal_1529_H.Sub.01.transfer</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Duration</Tag>
        <Value>00;04;13;29</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>End</Tag>
        <Value>00;07;16;18</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Media Status</Tag>
        <Value>partial</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Modified By</Tag>
        <Value>rjensen</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Modified Date</Tag>
        <Value>2015-07-29T16:15:11.000-0400</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Path</Tag>
        <Value>/Sent to Playback/Week31/Wednesday/060a2b340101010101010f0013-000000-55b9344b27dd00a6-060e2b347f7f-2a80</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Start</Tag>
        <Value>00;03;02;19</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Tracks</Tag>
        <Value>V1-9 A1-2 TC1</Value>
      </Entry>
      <Entry Group="SYSTEM">
        <Tag>Type</Tag>
        <Value>sequence</Value>
      </Entry>
      <Entry Group="USER">
        <Tag>Video ID</Tag>
        <Value>test55</Value>
      </Entry>
      <Locator>
        <Label>NK IN</Label>
        <Color>Blue</Color>
        <Timecode>00;03;24;17</Timecode>
        <Username>jolive</Username>
        <Track>V7</Track>
      </Locator>
      <Locator>
        <Label>BUG/Phone Number/Watermark OUT</Label>
        <Color>Magenta</Color>
        <Timecode>00;04;01;02</Timecode>
        <Username>jolive</Username>
        <Track>V8</Track>
      </Locator>
      <Locator>
        <Label>NK OUT</Label>
        <Color>Blue</Color>
        <Timecode>00;03;41;06</Timecode>
        <Username>jolive</Username>
        <Track>V7</Track>
      </Locator>
      <Locator>
        <Label>BUG/Phone Number/Watermark IN</Label>
        <Color>Magenta</Color>
        <Timecode>00;04;46;13</Timecode>
        <Username>jolive</Username>
        <Track>V8</Track>
      </Locator>
      <Locator>
        <Label>BUG/Phone Number/Watermark OUT</Label>
        <Color>Magenta</Color>
        <Timecode>00;04;30;04</Timecode>
        <Username>jolive</Username>
        <Track>V8</Track>
      </Locator>
      <Locator>
        <Label>BUG/Phone Number/Watermark IN</Label>
        <Color>Magenta</Color>
        <Timecode>00;03;41;21</Timecode>
        <Username>jolive</Username>
        <Track>V8</Track>
      </Locator>
    </Metadata>

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试查找由{。p>创建值的<Tag>个节点

您的testselect语句不是有效的XPath。那里的输入应该是这样的:

<xsl:if test="//Entry[Tag='Created By']">

基本上说“如果任何级别的任何标记节点的文本显示为'创建者',则返回true”。然后,您需要确定要选择的元素/属性 - Created By不是属性或元素,而是元素的文本

我会更进一步,建议您最想要的是一个模板,以匹配Tag的文本显示为“创建者”的节点,这可能如下所示:

<xsl:template match="Metadata/Entry[Tag='Created By']">
    <xsl:value-of select="@Group" />
</xsl:template>

假设上下文为/