2012-04-17 15 views
7

Tôi có một tập tin XML như:XSLT - chọn một giá trị thuộc tính từ một 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> 

Để nhận phiên bản trong file xsl tôi có:

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

Điều này không trả về bất kỳ giá trị nào. Tôi đang làm gì sai?

+0

Nó sẽ cho bạn một lỗi cú pháp cho bạn biết chính xác những gì bạn đang làm sai - đó là một bộ xử lý XSLT khá lame nếu nó không trỏ đến lỗi của bạn. –

Trả lời

11

Nó phải là

BatchTable/UUThref/@Version 

không

BatchTable/UUThref/[@Version] 

... nơi là bạn nhận được dấu ngoặc vuông từ đâu?


Tôi đã thử nghiệm sau đây, và nó chắc chắn hoạt động:

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

... dòng lệnh này hoạt động bằng cách áp dụng XSLT sau:

<?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

Ngay cả khi không có dấu ngoặc vuông, nó không chọn giá trị của Phiên bản. – rkk

+0

@rkk - Có '// UUThref/@ Version' hoạt động không? Nếu có, hãy thử '/ UUThref/@ Version'; điều này sẽ thu hẹp nơi gốc tài liệu có liên quan. –

+0

Bạn đang sử dụng ngôn ngữ lập trình nào để chuyển đổi? Một số bộ vi xử lý XSLT sẽ cầu kỳ về việc có '' trong tệp XML của bạn, v.v. Bạn có nhận được bất kỳ thông báo lỗi nào không? – mellamokb

Các vấn đề liên quan