2012-04-17 10 views
7

Ho un file XML come:XSLT - selezionando un valore di attributo da un file 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> 

Al fine di scegliere la versione del file xsl che ho:

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

Questo non lo fa restituire qualsiasi valore. Che cosa sto facendo di sbagliato?

+0

dovrebbe dare un errore di sintassi che ti dice esattamente cosa stai facendo male - è un processore XSLT piuttosto zoppo se non punta al tuo errore. –

risposta

11

Dovrebbe essere

BatchTable/UUThref/@Version 

non

BatchTable/UUThref/[@Version] 

... dove stai ottenendo le parentesi quadre da?


Ho provato quanto segue, e funziona sicuramente:

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

... questa riga di comando funziona applicando la seguente 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

Anche senza parentesi quadra non seleziona il valore della versione. – rkk

+0

@rkk - '// UUThref/@ Version' funziona? Se è così, prova '/ UUThref/@ Version'; questo restringerà dove si trova la radice del documento pertinente. –

+0

Quale linguaggio di programmazione stai utilizzando per la conversione? Alcuni processori XSLT saranno schizzinosi dall'avere "" nel file XML, ecc. Ricevi messaggi di errore? – mellamokb

Problemi correlati