Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 仅链接节点中的特定文本_Xml_Xslt_Xpath - Fatal编程技术网

Xml 仅链接节点中的特定文本

Xml 仅链接节点中的特定文本,xml,xslt,xpath,Xml,Xslt,Xpath,我有以下示例XML: <block> <see link="IDNUMBER-1">(<i>See:</i> IDNUMBER-1</see>; <see link="IDNUMBER-2"> IDNUMBER-2)</see> <see link="IDNUMBER-3">(<i>See:</i> IDNUMBER-3)</see> </bl

我有以下示例XML:

<block>
    <see link="IDNUMBER-1">(<i>See:</i> IDNUMBER-1</see>; <see link="IDNUMBER-2"> IDNUMBER-2)</see>
    <see link="IDNUMBER-3">(<i>See:</i> IDNUMBER-3)</see>
</block>
虽然这是“正确的”,但它使整个东西都可以点击。我是否可以以某种方式指示XSLT排除“See:”部分,或者使其最初仅使
链接
属性(即其相关文本)可单击


编辑:XSLT 1.1版

您可以做什么,而不是在上进行匹配请参见,在其文本节点上进行匹配,但仅在文本包含链接属性的位置进行匹配

<xsl:template match="see/text()[contains(., ../@link)]">

例如,这意味着它将不匹配只包含一个括号的文本节点

但是,它显然会与文本节点“IDNUMBER-2”匹配,但是您可以使用子字符串前面的子字符串后面的函数将这些内容输出到链接的任一侧

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes" />
    <xsl:template match="see/text()[contains(., ../@link)]">
        <xsl:value-of select="substring-before(., ../@link)" />
        <a href="#{../@link}">
           <xsl:value-of select="../@link" />
        </a>
        <xsl:value-of select="substring-after(., ../@link)" />
    </xsl:template>
</xsl:stylesheet>


请注意,在此处输出href属性时使用了属性值模板。大括号表示要计算的表达式,而不是字面上的输出,使代码更加简洁易读。

XSLT的哪个版本?谢谢Tim。你再一次回答了我的问题,这也是正确的答案。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes" />
    <xsl:template match="see/text()[contains(., ../@link)]">
        <xsl:value-of select="substring-before(., ../@link)" />
        <a href="#{../@link}">
           <xsl:value-of select="../@link" />
        </a>
        <xsl:value-of select="substring-after(., ../@link)" />
    </xsl:template>
</xsl:stylesheet>