2013-09-12 2 views
-2
<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<Company> 

    <EmployeeDetail> 
<Employees> 
     <name>Vishal</name> 
     <name>Ranvijay</name> 
     <name>Jagmit</name> 
</Employees> 
<Employees> 
     <name>Verma</name> 
     <name>Sahay</name> 
     <name>Singh</name> 
</Employees> 
    </EmployeeDetail> 

</Company> 

Я хочу создать XSLT, чтобы создать результат, похожий на:нужно XSLT для создания вывода из XML

Вишал Верма
Ranvijay Sahay
Jagmit Сингх

ответ

0

Это XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/*"> 
    <xsl:apply-templates select="*/*[1]/*"/> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:variable name="vPos" select="position()"/> 
    <xsl:if test="position() &gt; 1">&#160;</xsl:if> 
    <xsl:value-of 
     select="concat(., 
        ' ', 
        ../following-sibling::*/*[position() = $vPos])"/> 
    </xsl:template> 

</xsl:stylesheet> 

... когда применяется к исходному XML:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Edited by XMLSpy® --> 
<Company> 
    <EmployeeDetail> 
    <Employees> 
     <name>Vishal</name> 
     <name>Ranvijay</name> 
     <name>Jagmit</name> 
    </Employees> 
    <Employees> 
     <name>Verma</name> 
     <name>Sahay</name> 
     <name>Singh</name> 
    </Employees> 
    </EmployeeDetail> 
</Company> 

... производит вывод, который вы желаете:

Vishal Verma Ranvijay Sahay Jagmit Singh 

Пояснение:

  • Первый шаблон соответствует элементу верхнего уровня. После его обнаружения процессору XSLT предлагается применять шаблоны ко всем дочерним элементам первого элемента <Employees>.
  • Второй шаблон соответствует любому элементу (который, учитывая, что в XSLT есть только один вызов <xsl:apply-templates>, соответствует любым дочерним элементам первого элемента <Employees>). При нахождении такого элемента процессор выводит значение этого текущего элемента, пробела и значения смежного элемента <name> (что означает, элемент <name>, который существует в том же положении, что и текущий элемент, но в контексте Второй элемент <Employees>).
    • Обратите внимание на использование <xsl:if test="position() &gt; 1">&#160;</xsl:if> - это выводит пробел, если мы не достигли последнего элемента (таким образом, предотвращая прослеживание пробелов).
+0

Большое спасибо –

0

Попробуйте это.

<xsl:for-each select="//Employees//name"> 
<xsl:text><xsl:value-of select="."/></xsl:text> 
<xsl:if test="position() != last()" /> 
    <xsl:text> </xsl:text> 
</xsl:if> 
</xsl:for-each> 

Я добавил пространство после каждого имени внутри оператора if. Оператор if должен исключать пробельные пробелы.

+0

Привет Спасибо за ответ до сих пор я не получил правильный выход VishalRanvijayJagmitVermaSahaySingh Но мне нужно из Vishal Верма Ranvijay Sahay Jagmit Singh –

0

Этого было бы достаточно или дело касалось вопроса?

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:output method="text"/> 

    <xsl:template match="@*|node()"> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:template> 

    <xsl:template match="name"> 
     <xsl:value-of select="." /><xsl:text> </xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Привет Спасибо за ответ до сих пор я не получил право выхода VishalRanvijayJagmitVermaSahaySingh Но мне нужно из Vishal Verma Ranvijay Sahay Jagmit Singh –

Смежные вопросы