2013-08-23 4 views
0

Привет с помощью этого кода XSLПолучить определенную строку с помощью 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:[email protected]<soa:Condition>4949b7da-3253-490d-96b2-d0409ac406ad</soa:Condition> 
     <soa:Default>00:00:00:[email protected]</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

Заранее спасибо за answear

+0

Где 'G: \ KU.mov -G: \ KU2.mov' взялось? Они не отображаются в вашем входном XML. (Учитывая шаблон XSL здесь, входной XML должен быть таким же, как и выходной XML-код, который вы показываете.) –

+1

Поместите свой источник xml в красивую печать – jvverde

+0

XSL, который вы написали, буквально означает ... совпадение с корнем и копирование всего на вывод. –

ответ

0

Там находится одна вещь, чтобы отметить, прежде чем делать что-нибудь еще, то, что XML использует пространство имен, и поэтому все элементы в XML являются частью этого пространства имен. Это означает, что вам нужно будет объявить одно и то же пространство имен в XSLT, чтобы XSLT мог сопоставлять определенные элементы в пространстве имен.

Вы бы объявить его как часть XSL: таблицы стилей элемент:

<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: Параметр элемент. Встроенный шаблон будет делать это автоматически, но он также выведет текст всех дочерних элементов в файле soa: Параметр. Таким образом, все, что нужно делать в 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> 
Смежные вопросы