【问题标题】:take complete structure from XML but only filtered childs with xslt/xpath从 XML 中获取完整的结构,但仅使用 xslt/xpath 过滤子项
【发布时间】:2014-09-23 01:45:17
【问题描述】:

在使用 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 表达式来实现吗? 请。帮助。

西吉

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    这可以通过单个 xpath 表达式来实现吗?

    不,因为 XPath 表达式 选择 节点,如果现有树,而您想要 构造 具有原始条目子集子集的新条目元素元素有。

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

    <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='...']"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      相关资源
      最近更新 更多