【问题标题】:XSLT to pick specific nodes, and parameterizing it from JavaXSLT 选择特定节点,并从 Java 参数化它
【发布时间】:2020-06-30 23:04:34
【问题描述】:

我有一个这样的 XML 结构,

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <PackageHeader>yadda yadda </PackageHeader>
     <PackageBody>
      <Element1>foo</Element1>
      <Element2>bar</Element2>
      <ElementN>xyz</ElementN>
   </PackageBody>

我有一个要求,我需要消除 Element1、Element2 或 ElementN,所以我编写了这个 XSLT,

<xsl:stylesheet version="3.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()[not(self::Element1)][not(self::Element2)]" />
    </xsl:copy>
</xsl:template> 

样式表>

我通过一个简单的 Java XSL 转换程序运行它。转换后的 XML 仅具有原始 XML 减去 Element1 和 Element2 的部分。我尝试了很多方法来从 Java 程序传递参数以参数化应该消除哪些节点,但到目前为止还没有运气。任何帮助将不胜感激。

【问题讨论】:

  • 听起来像是带有静态参数和阴影属性的 XSLT 3 的任务,如果使用的是处理器,最好与 Saxon s9api 一起使用。

标签: java xml xslt xslt-2.0


【解决方案1】:

听起来像是带有静态参数和阴影属性的 XSLT 3 的任务,最好与 Saxon s9api (http://saxonica.com/html/documentation9.9/javadoc/index.html) 一起使用,如果这是所使用的处理器:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">
    
  <xsl:param name="element-to-be-removed" static="yes" as="xs:string" select="'Element2'"/>

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template _match="{$element-to-be-removed}"/>
  
</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/gVhEaiE

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多