XPath根据子值选择元素

时间:2019-12-05 12:03:05

标签: xslt xpath

尝试根据其子元素之一的值选择元素

我正试图做同样的事情,但是没有用。

XML:

    <customize>
      <name>InstallationZeitfenster</name>
      <dataType rvcd="2">Alphanumerisch</dataType>
      <value>Nachmittag</value>
    </customize>
    <customize>
      <name>InstallationGeplant</name>
      <dataType rvcd="3">Datum</dataType>
      <value>06.11.2019</value>
    </customize>
  </customize>

我想要“值”节点的文本,其中的节点名称为“ InstallationGeplant”。那就是我试图做的。

<xsl:value-of select="/*[local-name()='deviceManagement']/*[local-name()='deviceLocation']/*[local-name()='deviceInstallation']/*[local-name()='deviceInfo']/*[local-name()='device']/*[local-name()='customize']/*[local-name()='customize']/*[local-name()='name']/text() = 'InstallationGeplant'/*[local-name()='value']"/>

有人知道我应该怎么做吗?

由于名称空间的原因,我必须像这样访问节点。 感谢您的帮助

2 个答案:

答案 0 :(得分:0)

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
    <xsl:value-of select="descendant::value[preceding-sibling::name[1]='InstallationGeplant']"/>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

您可以简单地做:

<xsl:value-of select="customize[name='InstallationGeplant']/value"/>

这来自父customize的上下文;您的尝试表明该结构比您显示的要深。


  

由于名称空间的原因,必须像这样访问节点

不,您不必也不应该。参见:XSLT Transform doesn't work until I remove root node