Xslt 相对于另一个节点的Xpath返回节点

Xslt 相对于另一个节点的Xpath返回节点,xslt,xpath,Xslt,Xpath,我已经搜索了所有具有包含(子字符串)字符串的属性的节点。这些节点可以在树的不同层次上找到,有时有5或6层深。我想知道它们在一个指定级别(2个级别)对应于哪个父节点/祖先节点。仅搜索的结果应远大于相应父级的结果 编辑以包含代码: /xs:schema/xs:element/genderant::node()/@*[以(,'my search string here')开头] 编辑以澄清我的意图: 当我执行上面的Xpath时,有时结果是 /xs:schema/xs:element/xs:comple

我已经搜索了所有具有包含(子字符串)字符串的属性的节点。这些节点可以在树的不同层次上找到,有时有5或6层深。我想知道它们在一个指定级别(2个级别)对应于哪个父节点/祖先节点。仅搜索的结果应远大于相应父级的结果

编辑以包含代码:
/xs:schema/xs:element/genderant::node()/@*[以(,'my search string here')开头]

编辑以澄清我的意图:

当我执行上面的Xpath时,有时结果是

/xs:schema/xs:element/xs:complexType/xs:attribute
/xs:schema/xs:element/xs:complexType/xs:sequence/xs:element
/xs:schema/xs:element/xs:complexType/xs:complexContent/xs:extension/xs:sequence/xs:element

这些结果表明我在模式中添加了特定于应用程序的代码。但是,我现在需要删除此代码。我正在构建一个“适配器”模式,它将
重新定义原始模式(未触及)和
导入
我的模式。我正在搜索的字符串是我的前缀。我需要的是前缀所在的/xs:schema/node()的@name,这样我就可以创建一个定义这些元素的新模式。它们将被导入适配器并重新定义另一个模式(我不应该修改)

重申一下,我需要在所有属性(/xs:schema/xs:element的后代)中搜索前缀,然后为搜索的每个匹配项获取相应的/xs:schema/xs:element/@name

重申一下,我需要在所有属性(/xs:schema/xs:element的后代)中搜索前缀,然后为搜索的每个匹配项获取相应的/xs:schema/xs:element/@name。

这应该做到:

/xs:schema/xs:element[starts-with(descendant::node()/@*, 'my-search-string-here')]
你想把它想象成

选择包含具有匹配属性的节点的
xs:element
s

而不是

选择
xs:element
s的子节点的匹配属性,然后进行备份


正如Eric提到的,我需要改变我的思维过程,选择包含具有匹配属性的节点的xs:element,而不是选择xs:elements的后代节点的匹配属性,然后进行备份。这是至关重要的。但是,他发布的用于选择属性的代码示例不起作用,我们需要使用另一种解决方案

下面的代码用于选择包含*(子字符串)字符串的元素和属性


/xs:schema/child::node()[genderant::node()/*[以(,'my prefix here')]开头]

很抱歉给您带来了困惑,但这是它需要工作的代码
/xs:schema/node()[@*[以(,'my search string here')]开头]
您不需要第二组方括号。我的工作在什么方面不起作用?另外,您的不查找子代,而是查找子代。请参阅最近的回答:我相信这会给出我要查找的结果:
/xs:schema/child::node()[genderant::node()/@*[以(,'my search string here')]开头]
是的,但在这种情况下,我的代码也可以工作,因为您不关心条件中返回的元素集。哦,我现在明白你的意思了。
/xs:schema/xs:element[starts-with(descendant::node()/@*, 'my-search-string-here')]