我打算將所有的變數集中起來,從而將它們設定為駐扎在模板之外的全域變數。正如下面所描述的,如果在模板內將其添加到本地,完全相同的變數也能作業。為了適應一個SO問題,代碼被大量地最小化了。全域變數的數量將更多。
問題:
將變數移到模板外并將其作為全域變數使用并不能得到預期的結果。
你可以在這個xsltfiddle中找到同樣的代碼。
代碼:
代碼:
資料(JSON):
<data>
{
"報告"。{
"事實"。[
{
"xbrl:概念": "se:CompanyName",
"值": "Great Company Ltd"
}
]
}
}
</data>
XSL:
<?xml version="1.0" encoding="UTF-8"? >
<xsl:styleheet xmlns:xsl="http://www. w3.org/1999/XSL/Transform" version="3.0">
<xsl: output method="xhtml"/span> indent="yes" html-version="5" />
<xsl:mode on-no-match="shallow-skip"/span>/>
<!--決議JSON到XML -->
<xsl:template match="data"/span>>
<xsl:apply-templates select="json-to-xml(. )/*"/>
</xsl:template>
<!--全域變數-->
<xsl: 變數 name="headings" select="//*[@key='xbrl:concept'] [. ='se:CompanyName']/.../*[@key='value']"/>/span>
<xsl:template match="//*[@key='fact']"/span>>
<!--本地變數在未輸入時也能作業 -->
<!--<xsl:variable name="headings" select="//*[@key='xbrl:concept'][. = 'se:CompanyName']/../*[@key='value']"/>
<xsl:value-of select="$headings"/span>/>
</xsl:template>/span>
</xsl:styleheet>/span>
結果:
<?xml version="1.0" encoding="UTF-8"?>
預期結果:
uj5u.com熱心網友回復: 你的策略 "我打算集中所有的變數,從而將它們設定為駐留在模板之外的全域變數。"這沒有任何意義,全域變數是相對于全域背景關系項進行評估的,任何區域變數是相對于模板的背景關系項或模板中的進一步嵌套指令進行評估的。
所以你的全域嘗試 你的所有路徑是否都是以 你可以試試,例如: 然后使用例如 但是我不建議這樣做,最終,我認為,大多數查找運算式更容易撰寫、閱讀和維護,閱讀、理解和維護的時間更短,如果它們是相對于你的背景關系專案的,可能往往更有效率。
標籤: 上一篇:替換XML-訊息中的前綴
<?
<?xml version="1.0" encoding="UTF-8"? >Great Company Ltd<xsl:variable name="headings" select="//*[@key='xbrl:concept'][. = 'se:CompanyName']/... /*[@key='value']"/>將尋找一個屬性為key的元素,該元素在全域背景關系專案中為xbrl:concept,據我所知,該專案是你的檔案,其中有一個data元素,包含一些JSON。顯然,那個檔案沒有任何這樣的元素。
//為起點的絕對路徑,并在檔案的任何地方尋找,這一點值得懷疑,但目前你甚至沒有正確的根來實作你使用 "全域變數 "的意圖。
<xsl: variable name="json-xml-doc" select="json-to-xml(data)"/>;
<xsl: variable name="headings" select="$json-xml-doc//*[@key='xbrl:concept'][. ='se:CompanyName']/.../*[@key='value']"/>/span>
