从XML获取完整的结构,但仅过滤带有xslt / xpath的子级

用户3894563

在使用xslt样式表中的xpath过滤xml文档时,我需要一些帮助。xml文档如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<constants>
    <entry key="KundenAuftragsnummer">
        <msg lang="EN">Customer Order Number</msg>
        <msg lang="DE">Kunden-Auftragsnummer</msg>
    </entry>
   <entry key="UnserZeichen">
      <msg lang="EN">our reference</msg>
      <msg lang="DE">Unser Zeichen</msg>
   </entry>
   ........

这是我的xslt .........

   <xsl:variable
      name="lang"
      select="Invoice/@language"></xsl:variable>
   <xsl:variable
      name="langText"
      select="document('Ausgangsrechnung Texte.xml')//*[msg[@lang=$lang]]">
    </xsl:variable>

我想要$ langText中的文档来保留整个结构,但只保留具有匹配语言的msg元素。可以使用单个xpath表达式来实现吗?帮助。

西吉

伊恩·罗伯茨(Ian Roberts)

可以使用单个xpath表达式来实现吗?

否,因为XPath表达式会选择节点(如果存在的话),而您想构造新的入口元素,该元素具有原始入口元素具有的子代的子集。

如果要将此过滤后的树发送到输出,请使用适当的模板以错误的语言去除味精元素。如果您只是建立一个查找表供以后使用,请使用当前使用的表,该表将设置langText为具有适当语言的味精的条目元素集,然后在查找时进行过滤

<xsl:value-of select="$langText[@key='...']/msg[@lang=$lang]"/>

或者,将变量设置为容纳msg元素而不是条目,并在其父项上使用谓词查找它们

<xsl:variable
  name="lang"
  select="Invoice/@language"></xsl:variable>
<xsl:variable
  name="langText"
  select="document('Ausgangsrechnung Texte.xml')/constants/entry/msg[@lang=$lang]">
</xsl:variable>

<xsl:value-of select="$langText[../@key='...']"/>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章