2015-09-19 59 views
1

我一直在寻找,但不断出现错误。我有这样的XML文件:非标准XML上的XSLT

<vmix> 
<version>16.0.0.71</version> 
<inputs> 
<input key="38213dcd-5542-4440-9519-7288efebdd3b" number="1" type="Xaml"  title="ScoreBoardHD.xaml" state="Paused" position="0" duration="0" loop="False"  selectedIndex="0"> 
ScoreBoardHD.xaml 
<text index="0" name="HomeTitle">yyyyyyyyyyyyy</text> 
<text index="1" name="AwayTitle">Azzzzzzzzzzzzzzzz</text> 
<text index="2" name="HomeScore">15</text> 
<text index="3" name="AwayScore">2</text> 
</input> 
<input key="3873bbce-dc0f-4afd-a50b-3e60e74e7d57" number="2" type="Blank"  title="Blank" state="Paused" position="0" duration="0" loop="False">Blank</input> 
</inputs> 
<overlays> 
<overlay number="1"/> 
<overlay number="2"/> 
<overlay number="3"/> 
<overlay number="4"/> 
<overlay number="5"/> 
<overlay number="6"/> 
</overlays> 
<preview>1</preview> 
<active>1</active> 
<fadeToBlack>False</fadeToBlack> 
<transitions> 
<transition number="1" effect="Fade" duration="500"/> 
<transition number="2" effect="Merge" duration="1000"/> 
<transition number="3" effect="Wipe" duration="1000"/> 
<transition number="4" effect="CubeZoom" duration="1000"/> 
</transitions> 
<recording>False</recording> 
<external>False</external> 
<streaming>False</streaming> 
<playList>False</playList> 
<multiCorder>False</multiCorder> 
<audio> 
<master volume="100" muted="False" headphonesVolume="100"/> 
</audio> 
</vmix> 

我试图提取此:

<text index="0" name="HomeTitle">yyyyyyyyyyyyy</text> 
<text index="1" name="AwayTitle">Azzzzzzzzzzzzzzzz</text> 
<text index="2" name="HomeScore">15</text> 
<text index="3" name="AwayScore">2</text> 

不过的方式,XSLT可以解析,因为在XML似乎是非标准不能形成。

<xsl:for-each select="inputs/input/text"> 
    <tr> 
    <td><xsl:value-of select="HomeTitle"/></td> 
    <td><xsl:value-of select="HomeScore"/></td> 
    </tr> 

出现空白。有什么想法吗?

+2

它不是有效的xml期限...您只能期望处理_valid_ xml。这就是你所拥有的文字吗?它看起来最后三行是重复的。 –

+0

谢谢,我纠正了它。它是一个来自视频编辑程序的设置文件,我正在尝试获取标题上使用的文本。有什么方法可以将标签从文件中取出吗? – columbuscountyschool

回答

0

xsltproc似乎处理XML就好了,但它毕竟相当宽松。以下XSLT会生成您想要的“<tr><td>yyyyyyyyyyyyy</td><td>15</td></tr>”?

<xsl:template match="//inputs/input"> 
    <tr> 
     <td><xsl:value-of select="text[@name='HomeTitle']" /></td> 
     <td><xsl:value-of select="text[@name='HomeScore']" /></td> 
    </tr> 
</xsl:template> 
+0

完美。谢谢!! – columbuscountyschool

+0

@columbuscountyschool很高兴我可以帮助!不要忘记按绿色复选标记接受答案:) – tripflag

0

对于您的XML(在当前版本中)没有任何“非标准”。在inputs/input/text/的上下文中,您的表达select="HomeTitle"未选择任何内容,因为HomeTitle是属性的值,而不是子元素的名称。所以你需要用text[@name='HomeTitle']来选择它。