如何使用XSL查找确切的xml内容

如何使用XSL查找确切的xml内容,xml,xslt,substring,Xml,Xslt,Substring,我希望你能帮我解决这个问题 我需要获取字符串所在节点的local-name() var str="the world is complex"; <firsttag>The world is complex.</firsttag> <secondtag>The world is complex</secondtag> ... var str=“世界是复杂的”; 世界是复杂的。 世界是复杂的 ... 这是我的代码: <xsl:if test

我希望你能帮我解决这个问题

我需要获取字符串所在节点的
local-name()

var str="the world is complex";

<firsttag>The world is complex.</firsttag>
<secondtag>The world is complex</secondtag>
...
var str=“世界是复杂的”;
世界是复杂的。
世界是复杂的
...
这是我的代码:

<xsl:if test="$str">
        <xsl:variable name="nodename">
        <xsl:value-of select="local-name([contains(.,$str)])"/>
    </xsl:variable> 
</xsl:if>


但这将返回
的本地名称,即使它包含一个点(.),我被告知可以使用
子字符串before
子字符串before
进行验证,以获得具有确切字符串的节点,前后不带任何内容,但我担心,如果我在不同的节点上复制了内容,可能会产生相同的结果,但这不是我现在关心的问题。

你的问题并不完全清楚。给定以下测试输入:

<input>
    <firsttag>The world is complex.</firsttag>
    <secondtag>The world is complex</secondtag>
</input>

世界是复杂的。
世界是复杂的
以下样式表:

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:param name="str" select="'The world is complex'"/>

<xsl:template match="/">
    <output>
        <xsl:for-each select="//*[.=$str]">
            <elem-name>
                <xsl:value-of select="name()"/>
            </elem-name>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

将返回:

<?xml version="1.0" encoding="utf-8"?>
<output>
   <elem-name>secondtag</elem-name>
</output>

第二标签
如果可以确保只有一个输入元素(最多)与条件匹配(或者如果您只对第一个匹配的元素的名称感兴趣),则可以将代码缩减为:

<xsl:template match="/">
    <output>
        <xsl:value-of select="name(//*[.=$str])"/>
    </output>
</xsl:template>

获得:

<?xml version="1.0" encoding="utf-8"?>
<output>secondtag</output>

第二标签

注意XML是区分大小写的;“世界是复杂的”的字符串参数将与包含“世界是复杂的”的元素不匹配。

它看起来像是对本地名称的调用引用了当前上下文项(并且您的代码没有显示它是什么,但可能不是您希望在其上调用本地名称的内容)。请发布完整的XSLT代码。还有,什么语言是“var str=”世界是复杂的“,它是如何与XSLT交互的?我有一个特定的字符串,我将它作为参数发送到模板,在这种情况下,它将是
str
中的值,但一旦我在XML中执行搜索,它就会找到包含该值的第一个节点,例如,假设我需要找到表示
United States
的节点,但是如果我找到另一个表示
United States
的节点,我的变量
nodename
将包含
other_node
,我希望这是清楚的@michael.hor257kin在这种情况下,
str
将包含“United States”,我需要节点的名称,这样我可以在另一个模板中验证以添加一些HTML标记,但由于我得到的第一个节点包含字符串,但不是确切的字符串,因此第二个验证失败,并且HTML标记没有添加。没有,我恐怕一点也不清楚。如果您使用上面的代码,那么参数“United States”将找不到包含“United States of America”的节点。这不是你想要的吗?是的,我用你提供的代码修改了我的代码,它工作得很好,非常感谢@michael.hor257k