我是这个论坛的新手。我需要解析/读取一个包含大量元数据的xml(如下所示)。我有两个读取基于bu值的特定元值,例如,如果我的bu值是' 987654321abcdefghijklmnopaslasjdoiwneois123abc'我必须得到价值" d581452fa9ba3110VgnVCM10000038ccc5abRCRD | def"。我的问题是,元数据名称长度是否有任何限制?由于某种原因,我的xslt逻辑没有读取这个值(select =" MT [@ N = $ partialval] / @ V")。
XSLT代码段
<xsl:for-each select='./MT[@N="bu"]'>
<xsl:variable name="temp_bu" select="./@V"/>
<xsl:variable name="partialval" select="'987654321abcdefghijklmnopaslasjdoiwneois123abc'"/>
<xsl:if test="contains($partialval, $temp_bu)">
<xsl:variable name="partialbuval" select="MT[@N=$partialval]/@V"/>
<xsl:value-of disable-output-escaping='yes' select="concat('file://',$partialbuval,'test',$partialval)"/>
</xsl:if>
</xsl:for-each>
示例xml结构:
<MT N="bu" V="12345678910111121314sdnfske34234123234abc"/>
<MT N="12345678910111121314sdnfske34234123234abc" V="02715148a3e7a110VgnVCM1000001b89c5abRCRD|abc"/>
<MT N="12345678910111121314sdnfske34234123234abc_name" V="Item one"/>
<MT N="bu" V="987654321abcdefghijklmnopaslasjdoiwneois123abc"/>
<MT N="987654321abcdefghijklmnopaslasjdoiwneois123abc" V="d581452fa9ba3110VgnVCM10000038ccc5abRCRD|def"/>
<MT N="987654321abcdefghijklmnopaslasjdoiwneois123abc_name" V="Item two"/>
<MT N="bu" V="qqqqqwwwweeeee1112223333ssdfff3334sssssabc"/>
<MT N="qqqqqwwwweeeee1112223333ssdfff3334sssssabc" V="d581452fa9ba3110VgnVCM10000038ccc5abRCRD|ghi"/>
<MT N="qqqqqwwwweeeee1112223333ssdfff3334sssssabc_name" V="Item three"/>
<MT N="bu" V="hhhheeeertisodfnsdifwoein12345sfjsoif234defgh"/>
<MT N="hhhheeeertisodfnsdifwoein12345sfjsoif234defgh" V="d581452fa9ba3110VgnVCM10000038ccc5abRCRD|jkl"/>
<MT N="hhhheeeertisodfnsdifwoein12345sfjsoif234defgh_name" V="Item four"/>
将输出视为(此字符串中缺少partialbuval值) &#34;文件:// test987654321abcdefghijklmnopaslasjdoiwneois123abc&#34;
我不确定我在这里做错了什么。感谢您能帮助我。
谢谢, Amarnath
答案 0 :(得分:0)
我不确定我理解你的要求。但是在下面:
<xsl:for-each select="./MT[@N="bu"]">
<xsl:variable ... select="MT[@N=$partialval]/@V"/>
</xsl:for-each>
第二个select
永远不会选择任何内容。那是因为xsl:for-each
改变了上下文。因此,在xsl:for-each
(也称为序列构造函数)的主体内,上下文项是查看的当前MT
元素在xsl:for-each
的当前迭代中。
因此,第二个选择表达式要求任何MT
元素,当前MT
元素的直接子元素,并且没有任何元素。
额外的提示:./
在XPath表达式的开头总是毫无意义。启动带点的表达式的唯一情况是.//
。因此./MT
始终等同于MT
,这也更具可读性。