xslt - 从xml文件中选择属性值

时间:2021-08-03 14:05:01

I have a XML file as:

我有一个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>

In order to pick the Version in the xsl file I have:

为了在xsl文件中选择版本,我有:

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

This does not return any value. What am I doing wrong?

这不会返回任何值。我究竟做错了什么?

1 个解决方案

#1


13  

It should be

它应该是

BatchTable/UUThref/@Version

not

BatchTable/UUThref/[@Version]

...where are you getting the square brackets from?

...你从哪里得到方括号?


I've tested the following, and it definitely works:

我测试了以下内容,它确实有效:

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

...this command line works by applying the following XSLT:

...此命令行通过应用以下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>

#1


13  

It should be

它应该是

BatchTable/UUThref/@Version

not

BatchTable/UUThref/[@Version]

...where are you getting the square brackets from?

...你从哪里得到方括号?


I've tested the following, and it definitely works:

我测试了以下内容,它确实有效:

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

...this command line works by applying the following XSLT:

...此命令行通过应用以下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>