合并路径变量

时间:2018-11-29 18:07:58

标签: xml xslt xpath

如何将变量与路径搜索结合起来

这是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

更新: 仔细检查后,我相信xml如下

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

但是我不知道该值是否会一直存在。

我创建了一个变量计数,该变量计数使我可以选择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 个答案:

答案 0 :(得分:1)

考虑以下示例:

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>

XSLT 1.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>