2012-04-17 2 views
7

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

<BatchTable> 
    <UUThref SocketIndex='0 - CCM' 
      UUTResult='Passed' 
      URL='C:\OverrideCallbacks_BatchReport[4 16 2012][4 14 18 PM].xml' 
      FileName='OverrideCallbacks_BatchReport[4 16 2012][4 14 18 PM].xml' 
      ECAFailCount='1' 
      Version='StationPartNumber=55555StationSerialNumber=2222TPSPartNumber=1234'/> 
</BatchTable> 

Для того, чтобы выбрать версию в файле XSL У меня есть:

<xsl:value-of select="BatchTable/UUThref/[@Version]"/> 

Это не вернуть любое значение. Что я делаю не так?

+0

Это должно дать вам синтаксическая ошибка, которая говорит вам точно, что вы делаете неправильно - это довольно хромой XSLT-процессор, если он не указывает на вашу ошибку. –

ответ

11

Это должно быть

BatchTable/UUThref/@Version 

не

BatchTable/UUThref/[@Version] 

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


Я проверил следующее, и это, безусловно, работает:

xmlstarlet sel -t -m 'BatchTable/UUThref/@Version' -v . <test.xml 

... эта командная строка работает по следующей XSLT:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version="1.0" extension-element-prefixes="exslt"> 
    <xsl:output omit-xml-declaration="yes" indent="no"/> 
    <xsl:template match="/"> 
    <xsl:for-each select="BatchTable/UUThref/@Version"> 
     <xsl:call-template name="value-of-template"> 
     <xsl:with-param name="select" select="."/> 
     </xsl:call-template> 
    </xsl:for-each> 
    </xsl:template> 
    <xsl:template name="value-of-template"> 
    <xsl:param name="select"/> 
    <xsl:value-of select="$select"/> 
    <xsl:for-each select="exslt:node-set($select)[position()&gt;1]"> 
     <xsl:value-of select="'&#10;'"/> 
     <xsl:value-of select="."/> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Даже без квадратных скобок он не выбирает значение Version. – rkk

+0

@rkk - Работает ли '// UUThref/@ Version'? Если да, попробуйте '/ UUThref/@ Version'; это будет сужаться там, где находится соответствующий корень документа. –

+0

Какой язык программирования вы используете для преобразования? Некоторые процессоры XSLT будут придирчивы к тому, что в вашем XML-файле будет '' и т. Д. Получаете ли вы какие-либо сообщения об ошибках? – mellamokb

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