Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Xml 如何获取其他子节点元素的值

Xml 如何获取其他子节点元素的值,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,我正在尝试从当前节点获取其他子节点elment的值abc 例如: <root> <child1> <abc-value>abc</abc-value> </child> <child2> <attribute name=def>def</def-value> </child2> </root> abc def XSL: child1值

我正在尝试从当前节点获取其他子节点elment的值
abc

例如:

<root>
  <child1>
     <abc-value>abc</abc-value>
  </child>
  <child2>
     <attribute name=def>def</def-value>
  </child2>
</root>

abc
def
XSL:


child1值为:
child2值为:
我所要做的就是,从child2模板匹配中,调用child1元素的值
abc

排除:

Child1值为:abc

Child2值为:def


<xsl:template name="child2" match="attribute">
   child1 value is: <xsl:value-of select="../../child1/abc-value" />
   child2 value is: <xsl:value-of select="." />
</xsl:template> 
child1值为: child2值为:
更新:根据对您的问题的编辑:

  • 模板现在与
    元素匹配
  • 由于模板的当前节点(
    元素)比以前更深,因此child1值的select表达式将更改为使用附加的
    。/

child1值为:
child2值为:
更新:根据对您的问题的编辑:

  • 模板现在与
    元素匹配
  • 由于模板的当前节点(
    元素)比以前更深,因此child1值的select表达式将更改为使用附加的
    。/

正确,+1,但请关闭
xsl:value of
语句--太小,SO无法修复。当我使用它时,它会出现以下错误:XPTY0020:无法在此处选择节点:上下文项是原子值更新的child2节点,具有新元素
@phani:如前所述,您的模板只能匹配一个元素(无论是
还是
),都不是原子值。原子值是例如数字或字符串(不是元素或文本节点)。因此,您使用的匹配模式一定与您在回答中显示的不同。请告诉我们您实际在做什么,也许我们可以提供帮助。@Larsh您是对的,我发现这是我的模板语法错误。对,+1,但请关闭
xsl:value of
语句-太小,因此无法让我修复。当我使用它时,它会得到以下结果:wing错误:XPTY0020:无法在此处选择节点:上下文项是原子值更新的child2节点,带有新元素
@phani:如前所述,模板只能匹配元素(无论是
还是
),而不是原子值。原子值是例如数字或字符串(不是元素或文本节点)。因此,您使用的匹配模式一定与您在回答中显示的不同。请告诉我们您实际在做什么,也许我们可以提供帮助。@Larsh您是对的,我发现这是我的模板语法错误。上次编辑后,您的XML格式不再正确。特别是
def
。此外,您可能会将自己与在
xsl:template
中匹配
match
name
属性。如果确实需要使用命名模板,请选择一个与其中一个输入元素不同的名称。这将使其更容易理解。在上次编辑之前,它的格式也不正确:child1的close标记不能是child。为什么命名新元素nt“attribute”?为什么要继续扩展这个问题?在上次编辑之后,您的XML不再是格式良好的。特别是
def
。此外,您可能会将自己与
xsl:template
中的
match
name
属性混淆。如果确实需要使用命名模板,请选择一个不同的名称这是一个输入元素。这将使它更容易理解。在上次编辑之前,它的格式也不好:child1的close标记不能是child。为什么要将新元素命名为“attribute”?为什么要继续扩展这个问题?
<xsl:template name="child2" match="attribute">
   child1 value is: <xsl:value-of select="../../child1/abc-value" />
   child2 value is: <xsl:value-of select="." />
</xsl:template>