XSLT选择特定节点,并从Java参数化它

XSLT选择特定节点,并从Java参数化它,java,xml,xslt,xslt-2.0,Java,Xml,Xslt,Xslt 2.0,我有这样的XML结构 <?xml version="1.0" encoding="UTF-8"?> <Package> <PackageHeader>yadda yadda </PackageHeader> <PackageBody> <Element1>foo</Element1> <Element2>bar</

我有这样的XML结构

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

雅达雅达
福
酒吧
xyz
我有一个需要消除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> 


我通过一个简单的JavaXSL转换程序来运行它。转换后的XML只有原始XML减去Element1和Element2后的elevrything。我尝试了很多方法从Java程序中传递参数,以参数化哪些节点应该被删除,但到目前为止没有成功。任何帮助都将不胜感激。

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

<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>


听起来像是XSLT 3的任务,带有静态参数和阴影属性,如果使用的是Saxon s9api(),则最好与之配合使用:

<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>


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