1

我有以下 XML 代码,我需要使用 xslt 提取一些特定属性。可能有 1000 行。它应该遍历每一行。如果 FeatureDisplay 无效,它应该向用户显示相应的部分和特征代码是错误的。我的验证条件是:

  1. 如果 FeatureDisplay 长度小于 5 则抛出错误
  2. 如果 FeatureDisplay 长度大于 5,则在验证部分,将字符串分成长度为 6 的子字符串。测试子字符串。子字符串的最后一个值应该是 ; 或|。如果位置 0 或 4 处的值是空格,则抛出错误。如果位置 0 到 4 的值不是字母数字值或“@”或空格,则抛出错误。如果有更多子字符串,请重复测试过程。

如果 FeatureDisplay 值为 12345;98765; 它应该打破为 12345;和 98765;如果存在任何无效字符串,它应该测试每个子字符串并抛出错误。

我的xml代码是

<sample>
<row>
  <FeaturesDisplay>
     <NewValue>VLTUB2</NewValue>
  </FeaturesDisplay>
  <part>
    <NewValue>a</NewValue>
  </part>
</row>
<row>
  <FeaturesDisplay>
     <NewValue>VLTU</NewValue>
  </FeaturesDisplay>
  <part>
    <NewValue>b</NewValue>
  </part>
</row>
  
</sample>
4

1 回答 1

1

你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <list>
        <xsl:apply-templates/>
    </list>
</xsl:template>

<xsl:template match="//NewValue">
    <output>
    <xsl:choose>
        <xsl:when test="string-length(.)&lt;5">
            <xsl:value-of select="."/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="substring(.,1,1)"/>
        </xsl:otherwise>
    </xsl:choose>
    </output>
</xsl:template>


</xsl:stylesheet>

如果字符串长度NewValue小于 5,则给出该值,否则只给出第一个字符。应用于您的 XML 源的 XSL 会给出以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<list>
<output>V</output>
<output>VLTU</output>
</list>

请根据您的特定需求调整 XSLT。

于 2013-03-13T16:22:18.753 回答