您好使用此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
这是我从aplication获得的参数
提前感谢你的衣服
答案 0 :(得分: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具有内置&#39;的概念。当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>