2013-09-16 6 views
0

У меня есть следующий XML-файл:XSLT преобразование, чтобы получить значения атрибутов

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DatDtl xmlns="http://ups.com/ttg/cache/country"> 
<CnyDtl> 
<Cny TslLguCd="001" CnyCd="00" Cny2Cd="DNA" Cny3Cd="000" CnyNa="Data Not Available" CnyOflNa="Data Not Available" RecEffSttDt="2010-12-31" RecEffEndDt="2099-12-31" RecUdtTs="2012-07-27 15:35:08.352773"/> 
<Cny TslLguCd="001" CnyCd="96" Cny2Cd="OTH" Cny3Cd="996" CnyNa="Other" CnyOflNa="Other" RecEffSttDt="2010-12-31" RecEffEndDt="2099-12-31" RecUdtTs="2012-07-27 15:35:14.291605"/> 
</CnyDtl> 
</DatDtl> 

Я хотел бы, чтобы преобразовать его в CSV-файл с только значения атрибутов для CnyCd и CnyNa. У меня есть следующий XSLT, написанный для извлечения этих двух значений:

< 

?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     <xsl:template match="/"> 
     <xsl:for-each select="CnyDtl/Cny"> 
     <xsl:value-of select="@CnyNa"/> 
<xsl:value-of select="@CnyCd"/> 
     </xsl:for-each> 
     </xsl:template> 
    </xsl:stylesheet> 

Но я всегда получаю ошибки. Какова была бы правильная трансформация XSLT для этого?

+0

Здравствуйте, вы должны соответствовать "DatDtl", прежде чем вы можете по-каждому " CnyDtl/Cny». Лучший ретардд, Питер – Peter

+0

Не говорите нам, что вы получаете ошибки, не сообщая нам, какие ошибки вы получаете. Они могут не иметь никакого смысла для вас, но они, вероятно, имеют смысл для людей, отвечающих на ваш вопрос. –

ответ

0

Прежде всего, в вашей таблице стилей вы забыли упоминание о корневом элементе <DatDtl>. Также не забудьте объявить пространство имен в таблицу стилей.

Если вы используете следующий XSLT 1.0 таблицы стилей:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mypref="http://ups.com/ttg/cache/country"> 
    <xsl:output method="text" /> 

    <xsl:variable name="FS"> <!-- Field seperator --> 
     <xsl:text>;</xsl:text> 
    </xsl:variable> 
    <xsl:variable name="LT"> <!-- Line terminator --> 
     <xsl:text>&#13;</xsl:text> 
    </xsl:variable> 

    <xsl:template match="/mypref:DatDtl"> 
     <xsl:for-each select="mypref:CnyDtl/mypref:Cny"> 
      <xsl:value-of select="@CnyNa"/> 
      <xsl:value-of select=" $FS" /> 
      <xsl:value-of select="@CnyCd"/> 
      <xsl:value-of select="$LT" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

Это даст следующий результат:

Data Not Available;00 
Other;96 
Смежные вопросы