代码之家  ›  专栏  ›  技术社区  ›  Jseb

为路径组合变量

  •  0
  • Jseb  · 技术社区  · 7 年前

    这就是xml的样子

    <FIELD Name="User1Transmission.DocumentID" Value=""></<FIELD
    <FIELD Name="User2Transmission.DocumentID" Value=""></<FIELD
    <FIELD Name="User3Transmission.DocumentID" Value=""></<FIELD
    <FIELD Name="User4Transmission.DocumentID" Value=""></<FIELD
    

    更新:

    <FIELD>
      <NAME>User1Transmission.DocumentID</NAME>
      <VALUE></VALUE
    </FIELD>
    <FIELD>
      <NAME>User2Transmission.DocumentID</NAME>
      <VALUE></VALUE
    </FIELD>
    

    虽然这只是一个示例,但User3,4也可能不存在。因此,我试图根据用户查找信息。

    我知道,事实上,我可以通过这种方式获得每个用户的信息

    <DocumentID><xsl:value-of select="//FIELD[NAME='User1Transmission.DocumentID']/VALUE"/></DocumentID>
    

    我创建了一个变量count,它允许我选择User1、User2等等,但是我不能将变量与路径组合。

    我尝试以下方法

    <DocumentID><xsl:value-of select="//FIELD[NAME='User[$count]Transmission.DocumentID']/VALUE"/></DocumentID>
    <DocumentID><xsl:value-of select="//FIELD[NAME='concat('User',$count,'Transmission.DocumentID')]/VALUE"/></DocumentID>
    

    但它们似乎都失败了。

    1 回复  |  直到 7 年前
        1
  •  1
  •   michael.hor257k    7 年前

    考虑下面的例子:

    XML

    <FIELDS>
        <FIELD>
          <NAME>User1Transmission.DocumentID</NAME>
          <VALUE>100</VALUE>
        </FIELD>
        <FIELD>
          <NAME>User2Transmission.DocumentID</NAME>
          <VALUE>200</VALUE>
        </FIELD>
        <FIELD>
          <NAME>User3Transmission.DocumentID</NAME>
          <VALUE>300</VALUE>
        </FIELD>
    </FIELDS>
    

    XSLT1.0

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:param name="user-number" select="2"/>
    
    <xsl:template match="/FIELDS">
        <result>
            <xsl:value-of select="FIELD[NAME=concat('User', $user-number, 'Transmission.DocumentID')]/VALUE" />
        </result>
    </xsl:template>
    
    </xsl:stylesheet>
    

    结果

    <?xml version="1.0" encoding="utf-8"?>
    <result>200</result>