0

嗨,使用这个 XSL 代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" version="1.0" omit-xml-declaration="yes"/>
 <xsl:template match="/">
  <xsl:copy-of select="/"/>
 </xsl:template>
</xsl:stylesheet>    

我得到这么长的 XML

<?xml version="1.0" encoding="utf-8"?>
<soa:Label identifier="df0ca28f-1a41-4340-8156-e3ab0c97c559" name="JOB_LOG" description="" instance="464d2ff8-9d2d-404c-965d-907b09e08885" signature="00000000-0000-0000-0000-000000000000" xmlns:soa="urn:telestream.net:soa:core">
    <soa:Parameter type="timecode" identifier="d67ee32c-e432-4b5c-853b-739460c82617" bindable="True" name="DLUGOSC" enabled="true" disableable="false">00:00:30:00@25<soa:Condition>4949b7da-3253-490d-96b2-d0409ac406ad</soa:Condition>
        <soa:Default>00:00:00:00@29.97</soa:Default>
        <soa:IsRequired>false</soa:IsRequired>
    </soa:Parameter>
    <soa:Parameter type="uri" identifier="1c6a9bd8-a2ea-42ad-95e2-9d1ef9c305c0" bindable="True" name="FOLDER ZRODLOWY" editor="filebrowser" enabled="true" disableable="false">G:\PFR-Control\test\KU_DZIEN_ANGLI_ZWIASTUN.mxf<soa:Condition>4dbc7192-aab3-4cb4-b8bd-28ec21f2adb6</soa:Condition>
        <soa:Default />
        <soa:IsRequired>false</soa:IsRequired>
    </soa:Parameter>
    <soa:Parameter type="int64" identifier="ada72a89-51f2-400e-af9a-0d68c04f817d" bindable="True" name="WIELKOSC PLIKU" enabled="true" disableable="false">225833056<soa:Condition>fee552e0-ed39-4e15-bc0a-3f52e50f94bc</soa:Condition>
        <soa:Default>0</soa:Default>
        <soa:IsRequired>false</soa:IsRequired>
    </soa:Parameter>
    <soa:Parameter type="uri" identifier="123d14bd-3bb1-4a70-b39b-87e14b7c6b5d" bindable="True" name="New Parameter (4)" editor="filebrowser" enabled="true" disableable="false">G:\PFR-Control\test\KU_DZIEN_ANGLI_ZWIASTUN.1.mxf<soa:Condition>e02a7fc1-6a78-4ac4-a7d8-2d4e9807aafe</soa:Condition>
        <soa:Default />
        <soa:IsRequired>false</soa:IsRequired>
    </soa:Parameter>
</soa:Label>

我如何构造 XSL 文件以获得 -00:00:30:00@25 -22583305 G:\KU.mov -G:\KU2.mov

这是我从应用程序中获得的参数

在此先感谢您的回答

4

1 回答 1

0

在做任何其他事情之前需要注意一件事,即 XML 正在使用命名空间,因此 XML 中的所有元素都是该命名空间的一部分。这意味着您需要在 XSLT 中声明相同的名称空间,以便 XSLT 可以匹配名称空间中的特定元素。

您可以将其声明为xsl:stylesheet元素的一部分:

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:soa="urn:telestream.net:soa:core">

然后您可以在模板匹配中使用前缀,以确保您正确匹配元素

 <xsl:template match="soa:Parameter">

无论如何,您当前使用的所有 XSLT 都是按原样复制 XML,而不做任何更改,所以我猜您意识到输出如此长的原因是因为它与输入匹配。所以,首先要做的就是扔掉<xsl:template match="/">模板。

现在,XSLT 有了“内置”模板的概念,当 XSLT 文件本身没有显式模板时,它会在寻找与节点匹配的模板时使用该模板。内置模板将输出它找到的任何文本节点的文本,否则它将跳过该节点并继续处理其子节点。

尽管您尚未完全解释,但在您的问题中,您似乎想要输出每个soa:Parameter元素的第一个文本节点。内置模板会自动为您执行此操作,但它也会输出soa:Parameter元素的所有子元素的文本。因此,在这种情况下,您需要在 XSLT 中编写一个模板来忽略其他子元素

<xsl:template match="soa:Parameter/*" />

当然,如果您尝试这样做,您会发现它将所有参数文本连接在一个字符串中,没有空格,因此您可以添加另一个模板以在这种情况下输出带有空格的参数文本。

试试这个 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soa="urn:telestream.net:soa:core">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="soa:Parameter">
       <xsl:value-of select="concat(text(), ' ')" />
   </xsl:template>

   <xsl:template match="soa:Parameter/*" />
</xsl:stylesheet>
于 2013-08-24T09:21:20.667 回答