亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將命名空間從 Java 傳遞到 xslt,并使用來自 Java 的參數作為 xslt 中的節點

將命名空間從 Java 傳遞到 xslt,并使用來自 Java 的參數作為 xslt 中的節點

FFIVE 2022-09-22 13:57:44
我有一個xslt文件,使用阿帕奇-福普將xml文件轉換為pdf。但是我的xslt中沒有關于命名空間的所有信息。這取決于 xml。我可以在java中分析xml文檔并從xml獲取所有命名空間。但是我不知道如何將這個命名空間從java傳遞到我的xslt文件,以及接下來如何在標簽中聲明它??赡軉??<xsl:stylesheet>我無法粘貼我的原始 xslt 和 xml,因為它有敏感數據,但我準備了示例文件來顯示我的問題:    <?xml version="1.0" encoding="UTF-8"?><ns0:OtherCompany xmlns:ns8="http://www.company.com/schema/SF/definition/type/test"  xmlns:ns0="http://www.company.com/schema/SF/definition/type/a" xmlns:ns7="http://www.company.com/schema/SF/definition/type/b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <ns0:Header>      <ns8:From>2018-01-01</ns8:From>      <ns8:To>2018-12-31</ns8:To>      <ns8:CheckDate>2019-03-28</ns8:CheckDate>      <ns7:Code sysCode="1">Report</ns7:Code>      <ns7:Type>1</ns7:Type>   </ns0:Header>   <ns0:Changes>      <ns7:I>         <ns8:AmountA>1499142.61</ns8:AmountA>         <ns8:AmountB>54979.16</ns8:AmountB>      </ns7:I>      <ns7:II>         <ns8:AmountA>3398983.19</ns8:AmountA>         <ns8:AmountB>1499142.61</ns8:AmountB>      </ns7:II>      <ns7:III>         <ns8:AmountA>3398983.19</ns8:AmountA>         <ns8:AmountB>1499142.61</ns8:AmountB>      </ns7:III>   </ns0:Changes></ns0:OtherCompany>如何從 Java 傳遞 xmlPath前綴并在我的 xslt 中使用它?我想將示例字符串作為 xml 路徑前綴“ns0:其他公司/ns0:更改”第二個問題是我的命名空間,pathPrefix可以不同,但本地名稱總是一樣的,例如它可以是:"ns0:OtherCompany/ns0:Changes""ns10:OtherCompany/ns15:Changes""companyType:OtherCompany/companyChanges:Changes"或更多其他選項。當我有 xslt 時,我必須在示例 ns0、ns10、公司類型等中聲明標記。如果我不聲明它,我就會出錯。但我不知道我的xml中聲明了什么命名空間。我該如何將其傳遞給 xslt?<xsl:stylesheet>示例 i 通行證xmlPath前綴: “ns10:其他公司/ns15:Changes”和命名空間:ns10 和 ns15但我不知道如何達到它。
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

您是否使用像薩克森 9 這樣的 XSLT 2 處理器?您的 XSLT 代碼顯示 。如果您正在處理各種命名空間,那么在 XSLT/XPath 2 及更高版本中,一種方法是對命名空間前綴使用通配符,例如 將選擇任何命名空間中的這些元素。version="2.0"**:OtherCompany/*:Changes


要參數化表達式,您需要使用 XSLT 3 處理器(如 Saxon 9.8 或 9.9)以及所謂的陰影屬性(如 靜態參數):select_select


<?xml version="1.0" encoding="UTF-8"?>

<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="prefix" as="xs:string" static="yes" select="'/*:root/*:foo'"/>


  <xsl:output indent="yes"/>


  <xsl:template match="/">

      <xsl:apply-templates _select="{$prefix}/*:bar"/>

  </xsl:template>


  <xsl:template match="*:bar">

      <xsl:copy-of select="."/>

  </xsl:template>


</xsl:stylesheet>

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


我認為,您需要使用薩克森的s9api編程接口來設置靜態參數。


查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號